我有一个Linq表达式在几个地方使用。我沿着表达式路线走,因为没有一种合理的方式来完成一些搜索逻辑,否则不会枚举一个非常大的表。Linq All()/ Any()但不为空
private Expression<Func<Property, bool>> PropertyIsCompliant()
{
return (p) => p.CalculationSets.OfType<SingleDocumentCalculationSet>()
.GroupBy(cs => cs.SourceDocument)
.Select(g => g.OrderByDescending(d => d.DateTime).FirstOrDefault().CalculationResults)
.SelectMany(cr => cr)
.All(cr => cr.Outcome == CalculationOutcome.Success);
}
我的模型是这样:
- A楼盘有许多CalculationSets
- 每个CalculationSet也被分配到一个文档
- 每个CalculationSet有许多CalculationResults的
- 每个CalculationResult有一个结果
我试图创建一个表达式,告诉我是否按最近(即最近的不同结果)排序的文档分组的最新计算集的所有结果都是成功的。
我可以通过SelectMany子句从正确的CalculationSets中返回所有的CalculationResults。 我只是不知道如何返回true只有收集不是空的,他们都是结果。成功。
我明白所有的操作符会自动在空集合上返回true。我只是想不出一个办法!
这不是SQL翻译,或者如果你强迫它将会是低效返回true。 – usr
我使用了一个类似的解决方案(下图),它可以正确转换为SQL。 –