使用Entity Framework和LINQ选择和过滤数据

时间:2014-11-05 15:04:38

标签: c# linq entity-framework

假设我有以下查询:

 context.Orders.Where(predicate).Select(x => new { propA = x.PropA, propB = x.PropB}).ToList();

这是执行DB / ORM级别的where和select函数,只返回满足两个表达式的数据,还是返回满足谓词的所有结果,然后对那些执行select?

感谢。

2 个答案:

答案 0 :(得分:1)

您正在使用IQueryable.Select方法。所以它绝对被翻译成SQL。来自docs

  

Select<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, TResult>>)方法生成一个MethodCallExpression,表示调用Select<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, TResult>>)本身作为构造的泛型方法。然后,它将MethodCallExpression传递给源参数的Provider属性所表示的CreateQuery(Expression)的{​​{1}}方法。

您可以使用探查器验证这一点。或者,尝试在IQueryProvider中调用不受支持的方法,您将收到Select的异常,该异常也会验证linq to entities does not recognize the method X是否为Select转换为SQL而不是在内存中执行。

答案 1 :(得分:0)

它将在DB / ORM级别执行。只有在枚举IQueriable时才会获取查询结果,例如致电ToList()