0

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

我有一个具有如下架构的数据库表:

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

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

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

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

4

2 回答 2

2
var results = source.GroupBy(x => x.RecordType)
                    .Where(g => myRecordTypes.Contains(g.Key))
                    .Select(g => g.OrderByDescending(x => x.Time).First())
                    .ToList();

myRecordTypes结果是你想要得到的int[]一组s。RecordType

resultList<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);
于 2013-09-12T19:53:12.667 回答
0

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

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());
于 2013-09-12T19:54:33.810 回答