[英]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.dtmDate
的DateTime
object 可能設置為默認值,並且您希望返回項目的DateAdded
字段大於req.dtmDate
的所有項目,除非req.dtmDate
是1/1/0001
,在這種情況下應返回所有記錄。
如果是這種情況,我認為您可以將現有代碼修改為:
where (req.dtmDate.Year == 1 || d.DateAdded >= req.dtmDate)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.