我有一个 Orders 类,其中包含 OrderID、OrderName、CreateTime、EndTime 等... 现在,这是一个方法:
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
最佳答案
删除.AsEnumerable()
称呼。
AsEnumerable
将您的 ObjectQuery 转换为 IEnumerable<Order>
,这会阻止编译器找到正确的重载(它将使用 Enumerable.Where
而不是 Queryable.Where
,因为 list
的类型为 IEnumerable<Order>
)。这就是为什么只有查询的第一部分会发送到服务器( "select * from Orders"
),其余部分将在内存中执行。
如果您删除对 AsEnumerable
的调用,您的条件将正确应用于您的 ObjectQuery,从而允许它们在服务器上执行。
关于c# - Entity Framework 4.1 : select by multiple conditions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12000981/