在单个LINQ查询中获取Max和Min

cyr*_*rus 7 c# linq

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

例如

var minA = objects.Min(o => o.A);
var maxB = objects.Max(o => o.B);
Run Code Online (Sandbox Code Playgroud)

使用LINQ查询语法,有没有办法做到这一点,所以它只传递一次集合?

期望的结果将是匿名类型(例如,results.MinA = x,results.MaxB = y)

Cir*_*dec 12

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
    });
Run Code Online (Sandbox Code Playgroud)