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 语句,这就是我传递委托作为参数的原因。
如何使第一个查询有效?
虽然其他答案是正确的,但请注意,当尝试在 select 语句之后使用它时,必须调用AsQueryable()
明确地,否则编译器会假设我们正在尝试使用 IEnumerable 方法,该方法期望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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)