【问题标题】:LINQ query has me baffledLINQ 查询让我感到困惑
【发布时间】:2013-09-13 03:54:33
【问题描述】:

我将如何编写 LINQ 查询来执行以下操作?

我有一个数据库表,其架构如下:

ID - Int  
Time - DateTime  
RecordType - Int  
Msg - String  

我想获取每个“RecordType”的最新(使用“时间”字段)记录

另一个限制是我只对某些 RecordTypes 感兴趣 - 那些包含在 int 数组中的那些。

查询的结果将是每个 RecordType 一条记录 - 该类型的最新记录。

【问题讨论】:

    标签: c# sql linq entity-framework-4


    【解决方案1】:
    var results = source.GroupBy(x => x.RecordType)
                        .Where(g => myRecordTypes.Contains(g.Key))
                        .Select(g => g.OrderByDescending(x => x.Time).First())
                        .ToList();
    

    myRecordTypes 是 int[] 和一组 RecordTypes 您希望得到的结果。

    result 将是 List<Record>,每个 RecordType 一个项目。

    您可以将其更改为例如Dictionary<int, Recort>RecordType:

    var results = source.GroupBy(x => x.RecordType)
                        .Where(g => myRecordTypes.Contains(g.Key))
                        .Select(g => new { g.Key, item = g.OrderByDescending(x => x.Time).First() })
                        .ToDictionary(x => x.Key, x => x.item);
    

    【讨论】:

      【解决方案2】:

      按记录类型对它们进行分组,过滤掉您想要的那些,然后选择该组中按时间排序的第一个项目。

      int[] recordTypes = GetRecordTypes();
      var query = context.Table.GroupBy(item => item.RecordType)
          .Where(group => recordTypes.Contains(group.Key))
          .Select(group => group.OrderBy(item => item.Time).FirstOrDefault());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多