IQueryable<Organization> query = context.Organizations; Func<Reservation, bool> predicate = r => !r.IsDeleted; query.Select(o => new { Reservations = o.Reservations.Where(predicate) }).ToList();
该查询将引发“内部.NET Framework数据提供程序错误1025”异常,但下面的查询则不会。
query.Select(o => new { Reservations = o.Reservations.Where( r => !r.IsDeleted) }).ToList();
我需要使用第一个,因为我需要检查一些if语句以构造正确的谓词。我知道在这种情况下我不能使用if语句,这就是为什么我将委托作为参数传递的原因。
如何使第一个查询起作用?
尽管上述答案是正确的,但请注意,在选择语句后尝试使用它时,必须AsQueryable()显式调用,否则编译器将假定我们正在尝试使用IEnumerable方法,该方法期望a Func和not Expression<Func>。
AsQueryable()
Func
Expression<Func>
这可能是原始海报的问题,否则编译器将在大多数时间抱怨Expression<Func>而不是Func。
演示:以下操作将失败:
MyContext.MySet.Where(m => m.SubCollection.Select(s => s.SubItem).Any(expr)) .Load()
尽管以下将起作用:
MyContext.MySet.Where(m => m.SubCollection.Select(s => s.SubItem).AsQueryable().Any(expr)) .Load()