gpt4 book ai didi

c# - 如何合并给定属性的两个列表

转载 作者:太空狗 更新时间:2023-10-29 23:46:51 26 4
gpt4 key购买 nike

我有两个查询,每个查询都返回一个对象列表。

List<A> list1 = (....query...)
List<A> list2 = (....query...)

“A”是对象模型。

这两个查询返回几乎相同的对象,但具有不同的属性集。

我想根据对象 A 的属性删除重复项,将它们合并到一个列表中。

基本上是这样的:

List<A> finalLis = list1 join list2 on elemList1.somePropID == elemList2.somePropID 

在简单的 C# 风格中,它将是这样的:

foreach(elem1 : list1) {
foreach(elem2: list1) {
if(elem1.someID == elem2.someID) {
elem1.someProp = elem2.someProp
elem1.otherProp = elem2.otherProp
}
}
}

我不想这样做,因为我确信在 linq 中有更优雅的方式。

如果您有任何建议,请告诉我。

最佳答案

Linq 可以帮助您进行选择,但不能帮助您进行更新。所以你不会摆脱 foreach 声明。所以你的任务可以像这样用 linq 编写:

//the query is like LEFT JOIN in SQL
var query = from x in list1
join y in list2 on x.IDItem equals y.IDItem
into z
from q in z.DefaultIfEmpty()
select new {IOne = x, ITwo = q};
foreach (var pair in query)
{
if (pair.ITwo != null) // && pair.IOne.OneProperty != null
pair.IOne.OneProperty = pair.ITwo.TwoProperty;
}

var resultList = query.Select(x => x.IOne).ToList();

可以查看结果here .

关于c# - 如何合并给定属性的两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com