C# 使用LINQ合并对象列表
我有两个对象列表,使用Linq我想合并它们,但是如果两个列表包含具有相同键的对象,我只想要具有最大LastUpdated值的一个 我想我可以用max(LastUpdated)按键a得到一个列表分组,然后按键和LastUpdated重新加入列表,但必须有一种更有效的方法C# 使用LINQ合并对象列表,c#,linq,C#,Linq,我有两个对象列表,使用Linq我想合并它们,但是如果两个列表包含具有相同键的对象,我只想要具有最大LastUpdated值的一个 我想我可以用max(LastUpdated)按键a得到一个列表分组,然后按键和LastUpdated重新加入列表,但必须有一种更有效的方法 List<MyObject> lstListA = new List<MyObject>; List<MyObject> lstListB = new List<MyObject>;
List<MyObject> lstListA = new List<MyObject>;
List<MyObject> lstListB = new List<MyObject>;
public class MyObject
{
public string Key {get;set;}
public string Value {get;set;}
public DateTime LastUpdated {get;set;}
}
List lstListA=新列表;
列表lstListB=新列表;
公共类MyObject
{
公共字符串密钥{get;set;}
公共字符串值{get;set;}
公共日期时间上次更新{get;set;}
}
一个选项,使用区别于以下内容:
有点复杂,但这似乎也起作用:
var mergedItems = lstListA.Concat(lstListB);
mergedItems =
(from item in mergedItems
group item by item.Key into grp
let sameKey = mergedItems.Where(obj => obj.Key == grp.Key)
select sameKey.Where(obj => obj.LastUpdated == grp.Max(obj2 => obj2.LastUpdated)).Single()
).ToList();
经典的挑战者
IEnumerable<MyObject> query = lstListA
.Concat(lstListB)
.GroupBy(x => x.Key)
//now work with each group to pick a winner
.Select(g => g.OrderByDescending(x => x.LastUpdated).First())
IEnumerable查询=lstListA
.Concat(lstListB)
.GroupBy(x=>x.Key)
//现在与每组一起挑选一名获胜者
.Select(g=>g.OrderByDescending(x=>x.LastUpdated).First())
DistinctBy与使用Distinct与比较器有何不同?结果会是一样的吗?@Jeremy:是的,结果是一样的-区别只是更容易:)
IEnumerable<MyObject> query = lstListA
.Concat(lstListB)
.GroupBy(x => x.Key)
//now work with each group to pick a winner
.Select(g => g.OrderByDescending(x => x.LastUpdated).First())