具有多个聚合的 LINQ 查询

标签 linq .net-3.5 linq-to-objects

我将如何创建等效的 Linq To Objects 查询?

SELECT MIN(CASE WHEN p.type = "In" THEN p.PunchTime ELSE NULL END ) AS EarliestIn,
       MAX(CASE WHEN p.type = "Out" THEN p.PunchTime ELSE NULL END ) AS LatestOUt
FROM Punches p

最佳答案

单个枚举产生最小值和最大值(以及您想放入的任何其他聚合)。这在 vb.net 中要容易得多。

我知道这不能处理空箱。这很容易添加。

    List<int> myInts = new List<int>() { 1, 4, 2, 0, 3 };
    var y = myInts.Aggregate(
        new { Min = int.MaxValue, Max = int.MinValue },
        (a, i) =>
        new
        {
           Min = (i < a.Min) ? i : a.Min,
           Max = (a.Max < i) ? i : a.Max
        });
    Console.WriteLine("{0} {1}", y.Min, y.Max);

关于具有多个聚合的 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154680/

相关文章:

c# - 如何使用 lambda/linq to objects 从集合中提取一些数据?

linq - 基于组合框值构建动态 LINQ 查询

c# - 使用 Linq 从 xml 文件读取到对象列表

.net - 静态内容缓存

c# - 为什么我的表单在验证后不回发?

asp.net - 使用类库从 web.config/app.config 获取配置设置

c# - 将字符串转换为 Linq lambda 表达式

c# - LINQ:在 IEnumerable<T> 中分配属性值

c# - LINQ 身份函数

c# - Linq 数据映射与 Ms Access 数据库 : "Missing semicolon (;) at end of SQL statement."