一尘不染

内部.NET Framework数据提供程序错误1025

c#

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语句,这就是为什么我将委托作为参数传递的原因。

如何使第一个查询起作用?


阅读 312

收藏
2020-05-19

共1个答案

一尘不染

尽管上述答案是正确的,但请注意,在选择语句后尝试使用它时,必须AsQueryable()显式调用,否则编译器将假定我们正在尝试使用IEnumerable方法,该方法期望a
Func和not 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()
2020-05-19