c# - Entity Framework 4.1 : select by multiple conditions?

标签 c# linq entity-framework-4

我有一个 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/

相关文章:

c# - 确保用户只能保存在文件夹内

c# - 尝试使用 LINQ 连接对象名称时出现 "The element access is not permitted"错误

c# - 如何制作包含子对象(如 SQL 外连接)的 LINQ Select?

c# - 为什么在从表中选择值时排除 NULL 值

c# - IQueryProvider 覆盖

c# - 在 SOAP XML 中编码 char 类型元素

c# - 阻止 "Formulas have been recalculated, save"对话框?

entity-framework - 无法删除具有多对多关系的对象

c# - EF ICollection 与 List 与 IEnumerable 与 IQueryable

c# - 使用 C# 和 LINQ 比较两个大型字符串列表的最佳方法?