LINQ 查询让我感到困惑
本文关键字:查询 LINQ | 更新日期: 2023-09-27 18:31:03
如何编写 LINQ 查询来执行以下操作?
我有一个数据库表,其架构如下:
ID - Int
Time - DateTime
RecordType - Int
Msg - String
我想获取每个"记录类型"的最新(使用"时间"字段)记录
另一个限制是我只对某些 RecordType 感兴趣 - 那些包含在 int 数组中的记录类型。
查询的结果将是每个记录类型一条记录 - 此类型的最新记录。
var results = source.GroupBy(x => x.RecordType)
.Where(g => myRecordTypes.Contains(g.Key))
.Select(g => g.OrderByDescending(x => x.Time).First())
.ToList();
myRecordTypes
与您希望获得的一组RecordType
int[]
。
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);
按记录类型对它们进行分组,筛选出所需的记录类型,然后选择该组中按时间排序的第一个项目。
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());