LINQ方法语法
var methodSyntax = VersionControls.Where(x => !x.Removed).Max(x => x.VersionID);
LINQ查询语法
var querySyntax = from x in VersionControls
where !x.Removed
// how to do Max Aggregation in LINQ query syntax???
select x;
MSDN文档说,大约Query Syntax and Method Syntax in LINQ
查询语法和方法语法在语义上是相同的,但许多人发现查询语法简单,更容易阅读。某些查询必须表示为方法调用。例如,你必须使用一个方法调用来表达检索符合特定条件的元素数量的查询。你也必须使用一个方法调用中检索已在源序列中的最大值的元素的查询。
查询语法不能表达的一切,方法的语法可以
检查如何将它们结合起来,最小和最大in this answer
var mixedSyntax = (from x in VersionControls
where !x.Removed
select x).Max(x => x.VersionID);
你必须记住,每当源集合为空的Max()
方法会抛出异常。这就是为什么我会只是DefaultIfEmpty(defaultElementValue)
安全问题之前,链接一个Max()
。这样一来,灰的解决方案将成为:
var mixedSyntax = (from x in VersionControls
where !x.Removed
select x).DefaultIfEmpty(defaultVersionControlObject)
.Max(x => x.VersionID);