可选条件不工作linq

时间:2017-06-01 07:48:14

标签: c# linq

我在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都是假的。我做错了什么?

3 个答案:

答案 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