如何解决LINQ从每个查询中获取第一行
我有两组数据和ID,在数据集中每个ID都有多个条目。我想获取每个ID的最新条目。我可以只做data.Where(item => idList.Contains(item.ID));
,但这可以让我每行,而且每个ID我只想要一个。现在,我正在考虑仅迭代并为每个data.Where(item => item.ID == currentID).OrderBy(item => item.time).First();
这样的ID进行单独的查询,但这似乎很麻烦。在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,"Fail"),(1200,(1220,4,"Success"),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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。