实体框架4.1:按多个条件选择?

时间:2012-08-17 06:46:31

标签: c# linq entity-framework-4

我有一个带有OrderID,OrderName,CreateTime,EndTime等的Orders类...... 现在,这是一个方法:

private TmpContext context = new TmpContext();
public List<Order> GetOrders(string id,string name,DateTime createTime)
{
      var list= context.Orders.AsEnumerable();
      if(!string.isNullOrEmpty(id))
           list = list.Where(l=>l.OrderID.Contains(id));
      if(!string.isNullOrEmpty(name))
           list = list.Where(l=>l.OrderName.Contains(name));
      // other conditions 

      return list.ToList();
}

我使用Linqpad,GetOrders(2124,“Cloth”,DateTime.Now);找到sql是“select --- from Orders”。这意味着所有订单都是选择。

这种情况怎么办? :d

1 个答案:

答案 0 :(得分:4)

删除.AsEnumerable()电话。

AsEnumerable将您的ObjectQuery强制转换为IEnumerable<Order>,这会阻止编译器找到正确的重载(它会使用Enumerable.Where而不是Queryable.Where,因为list }类型为IEnumerable<Order>)。这就是为什么只将查询的第一部分发送到服务器("select * from Orders"),其余部分将在内存中执行。

如果删除对AsEnumerable的调用,您的条件将正确应用于您的ObjectQuery,允许它们在服务器上执行。