我有一组有两个属性的对象,A和B。我想得到A的最小值和B的最大值。

var minA = objects.Min(o => o.A);
var maxB = objects.Max(o => o.B);

使用linq查询语法,有没有办法做到这一点,使它只传递一次集合?
期望的结果将是匿名类型(例如,results.mina=x,results.maxb=y)

最佳答案

min和max都是聚合体。一般的linq聚合函数是Aggregate
假设属性A是一个整数,B是一个字符串,您可以编写如下内容:

objects.Aggregate(
    new {
        MinA = int.MaxValue,
        MaxB = string.Empty
    },
    (accumulator, o) => new {
        MinA = Math.Min(o.A, accumulator.MinA),
        MaxB = o.B > accumulator.MaxB ? o.B : accumulator.MaxB
    });

关于c# - 在单个LINQ查询中获取最大值和最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22240167/

10-10 07:24