该问题是由您的存储库返回的类型引起的;问题可以重现_repository.Reports
is not IQueryable<T>
。在这种情况下Reports
被视为非标量变量;顺便说一句,这在 LINQ 中是不允许的。看不支持引用非标量变量 http://msdn.microsoft.com/en-us/library/bb896317.aspx
关于为什么第二个查询有效的问题,它基本上是以下扩展方法IQueryable<T>
哪个组加入它IEnumerable<TInner>
.
public static IQueryable<TResult> GroupJoin<TOuter, TInner, TKey, TResult>(
this IQueryable<TOuter> outer,IEnumerable<TInner> inner,
Expression<Func<TOuter, TKey>> outerKeySelector,
Expression<Func<TInner, TKey>> innerKeySelector,
Expression<Func<TOuter, IEnumerable<TInner>, TResult>> resultSelector)
它只接受外部和内部的关键选择器的表达式(而不是引用非标量变量);其中上述约束不适用。
Note: If _repository.Reports
is of IQueryable<T>
第一个查询将起作用;因为EF会正确构建表达式树并执行适当的SQL。