簡體   English   中英

如果日期不是低日期,則僅包含在 where 條件中(01/01/0001)

[英]Only include in where condition if date is not low date(01/01/0001)

我有一個查詢,它有一個 where 條件來檢查和查找在某個日期之后添加的地址。 日期字段不是必需的,因此我希望僅在不是 1/1/0001 時才考慮條件的日期字段。 dtmDate 是正在傳遞的參數

詢問

from b in _context.customer
           join d in _context.Address on b.id equals d.Id 
           join e in _context.units on d.Id equals e.Id
           where (req.dtmDate.Year != 1 && d.DateAdded >= req.dtmDate)

select new modelAddress
              {
               address= d.address
              }

但這不起作用。 它沒有返回任何行

我會利用 LINQ 查詢在編寫時不執行的事實,因此您可以在創建基本查詢后有條件地添加子句:

var query = from b in _context.customer
       join d in _context.Address on b.id equals d.Id 
       join e in _context.units on d.Id equals e.Id;

if(req.dtmDate.Year != 1)
  query = query.Where(d.DateAdded >= req.dtmDate);

var result = query.Select(
  new modelAddress
  {
    address= d.address
  }
);

我更喜歡這個,因為我以前遇到過問題,特別是在 EF LINQ 查詢時 Where 子句包含在代碼中本地評估為 true 的內容,而不是數據庫將評估的內容。 在“通配符”數據庫查詢時,使用“如果 x 為真,則添加-另一個-where-clause”而不是“where(local-value-of-x-equals-local-”的模式似乎效果更好常量或一些-db-data-value-equals-y)"

如果我理解正確,您有一個名為req.dtmDateDateTime object 可能設置為默認值,並且您希望返回項目的DateAdded字段大於req.dtmDate的所有項目,除非req.dtmDate1/1/0001 ,在這種情況下應返回所有記錄。

如果是這種情況,我認為您可以將現有代碼修改為:

where (req.dtmDate.Year == 1 || d.DateAdded >= req.dtmDate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM