2014-02-20 61 views
0
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子句。 我在做什么错?为什么此LINQ查询中的Where子句不能追加?

但是,当我写的代码,

db.Orders.Where(...) 

所有在一杆,它的工作原理

+0

'Where'不会改变的地方集合,它只是返回基于在你必须每次都重新分配通过收集过滤收集:'OrderQuery = OrderQuery.Where(... );' – valverij

回答

2

你必须把它每次分配给您的查询。扩展方法每次都会返回一个新的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(); 
+0

谢谢,像魅力一样工作! – Nitin