我正在尝试找出如何最好地比较和合并两个 List<T>
有了新的List<T>
正在生成比较每个对象内的多个属性。
class Account
{
public Account() { }
public string ID { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
List<Account> Mine = new List<Account>();
List<Account> Yours = new List<Account>();
List<Account> Ours = new List<Account>();
Account m1 = new Account(){ ID = null, Name = "C_First", Value = "joe" };
Account m2 = new Account(){ ID = null, Name = "C_Last", Value = "bloggs" };
Account m3 = new Account(){ ID = null, Name = "C_Car", Value = "ford" };
Mine.Add(m1);
Mine.Add(m2);
Mine.Add(m3);
Account y1 = new Account(){ ID = "1", Name = "C_First", Value = "john" };
Account y2 = new Account(){ ID = "2", Name = "C_Last", Value = "public" };
Yours.Add(y1);
Yours.Add(y2);
结果List<Account> Ours
将有以下 List<Account>
对象:
{ ID = "1", Name = "C_First", Value = "joe" };
{ ID = "2", Name = "C_Last", Value = "bloggs" };
{ ID = null, Name = "C_Car", Value = "ford" };
我需要弄清楚如何最好地比较 List<Account>
之间的 ID 和 Value 属性List<Account> Yours
的对象ID 优先于List<Account> Mine
和 List<Account> Mine
值优先于 List<Account> Yours
以及 List<Account> Yours
中不存在的任何对象也正在添加。
我尝试过以下方法:
Ours = Mine.Except(Yours).ToList();
结果是List<Ours>
是空的。
我读过这篇文章Difference between two lists其中 Jon Skeet 提到使用自定义 IEqualityComparer<T>
做我需要做的事情,但我坚持如何创建 IEqualityComparer<T>
比较超过 1 个属性值。
最佳答案
不确定是否可以在“pue”LINQ 中完成,但一些过程代码就可以解决问题:
var dict = Yours.ToDictionary(y => y.Name);
foreach (var m in Mine) {
Account y;
if (dict.TryGetValue(m.Name, out y))
Ours.Add(new Account { ID = y.ID, Name = m.Name, Value = m.Value });
else
Ours.Add(m);
}
之后,打印我们的
...
foreach (var o in Ours)
Console.WriteLine("{0}\t{1}\t{2}", o.ID, o.Name, o.Value);
...给出以下结果:
1 C_First joe
2 C_Last bloggs
C_Car ford
关于c# - 比较两个 List<T> 并将其合并到新的 List<T> 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699137/