为什么此LINQ查询中的Where子句不附加?

时间:2014-02-20 19:46:15

标签: linq

IQueryable<Order> OrderQuery = db.Orders;

if (date_conditions != null)
{
    OrderQuery.Where(o => o.CreatedOn >= start_date);
    OrderQuery.Where(o => o.CreatedOn <= end_date);
}
return OrderQuery.ToList();

当我检查生成的SQL查询时,虽然执行了if条件,但没有WHERE子句。 我做错了什么?

但是,当我编写代码时,

db.Orders.Where(...)

一次拍摄,它的作品

1 个答案:

答案 0 :(得分:2)

您每次都必须将其分配给您的查询。 extensions方法每次返回一个新的IQuerable,基本上是对Where的两次调用创建一个新的IQueryable丢弃它(因为它永远不会分配给变量)。

IQueryable<Order> OrderQuery = db.Orders;

var date_conditions = payload["date"];
if (date_conditions != null)
{
    var dates = date_conditions as DateTime?[];
    OrderQuery = OrderQuery.Where(o => o.CreatedOn >= dates[0]);
    OrderQuery = OrderQuery.Where(o => o.CreatedOn <= dates[1]);
}
return OrderQuery.ToList();