[英]LINQ Get First Rows from Each Query
我有两组数据和 ID,每个 ID 在数据集中有多个条目。 我想获取每个 ID 的最新条目。 我可以做data.Where(item => idList.Contains(item.ID));
但这让我得到每一行,我每个 ID 只想要一个。 现在我正在考虑对每个 ID 进行迭代和单独查询,例如data.Where(item => item.ID == currentID).OrderBy(item => item.time).First();
,但这看起来很笨拙。 在 LINQ 中是否有更优雅的方法来做到这一点?
给定 ID [1, 2, 3, 4] 和数据
time | ID | result
-------------------
1230 | 1 | Succeed
1215 | 1 | Fail
1215 | 2 | Fail
1200 | 2 | Fail
1220 | 3 | Fail
1215 | 4 | Success
1200 | 5 | Fail
我想得到
time | ID | result
-------------------
1230 | 1 | Succeed
1215 | 2 | Fail
1220 | 3 | Fail
1215 | 4 | Success
您可以按 id 分组并获取时间最长的元素:
var ids = new[]{1,2,3,4};
var l = new List<(int time,int id,string result)>(){
(1230, 1, "Succeed"),
(1215, 1, "Fail"),
(1215, 2, "Fail"),
(1200, 2, "Fail"),
(1220, 3, "Fail"),
(1215, 4, "Success"),
(1200, 5, "Fail")
};
var results = l.Where(x => ids.Contains(x.id))
.GroupBy(
x => x.id,
(k,v) => v.OrderByDescending(x=>x.time).First()
);
这将导致
1230 1 Succeed
1215 2 Fail
1220 3 Fail
1215 4 Success
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.