如何做到最大聚集在LINQ查询语法?

问题描述 投票:3回答:2

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;
c# linq max
2个回答
2
投票

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);

2
投票

你必须记住,每当源集合为空的Max()方法会抛出异常。这就是为什么我会只是DefaultIfEmpty(defaultElementValue)安全问题之前,链接一个Max()。这样一来,灰的解决方案将成为:

var mixedSyntax = (from x in VersionControls
                  where !x.Removed
                  select x).DefaultIfEmpty(defaultVersionControlObject)
                           .Max(x => x.VersionID);
© www.soinside.com 2019 - 2024. All rights reserved.