我有一个带有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();
}
这种情况怎么办? :d
答案 0 :(得分:4)
删除.AsEnumerable()
电话。
AsEnumerable
将您的ObjectQuery强制转换为IEnumerable<Order>
,这会阻止编译器找到正确的重载(它会使用Enumerable.Where
而不是Queryable.Where
,因为list
}类型为IEnumerable<Order>
)。这就是为什么只将查询的第一部分发送到服务器("select * from Orders"
),其余部分将在内存中执行。
如果删除对AsEnumerable
的调用,您的条件将正确应用于您的ObjectQuery,允许它们在服务器上执行。