我在Lambda express中的可选条件有问题,如
var shouldCheckDate = !string.IsNullOrEmpty(fromDate);
var result = (from r in db.Notify
where r.ApplicationId == applicationId
&& (shouldCheckDate || r.CreatedDate.Date > date)
select r
).Count;
问题在于它始终排除这两个条件shouldCheckDate
true都是假的。我做错了什么?
答案 0 :(得分:5)
这是因为LINQ被转换为SQL和SQL,与C#相反,执行条件的所有部分,无论其中一个是否已经返回true。
答案 1 :(得分:2)
您可以通过仅在需要时添加where子句来编写IQueryable:
var query = db.Notify;
query = query.Where(r => r.ApplicationId == applicationId);
if (shouldCheckDate) {
query = query.Where(r => r.CreatedDate.Date > date);
}
var result = query.Count();
答案 2 :(得分:0)
你在这里有OR声明,
(shouldCheckDate || r.CreatedDate.Date > date)
因此即使其中一个true
条件足以使整个陈述成立。
也许r.CreatedDate.Date
总是> date
?