我有一個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。 –