gpt4 book ai didi

c# - 如何使用 LINQ 合并 2 个列表并添加新列表?

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:38 28 4
gpt4 key购买 nike

有两个列表。我想根据键(属性)ID 合并两个列表,并使用列表 2 中的值更新此记录。必须添加不在列表 1 中的所有列表项。

我在互联网上搜索并找到了有关 LINQ 连接功能的信息,但我还想使用 LINQ 将新记录/项目添加到列表中。有谁知道该怎么做(使用 1 个 LINQ 查询)?

到目前为止我的代码。

public class Item
{
public string Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}

[TestFixture]
public class CompareListTest
{
private List<Item> firstList;

[SetUp]
public void SetUp()
{
firstList.Add(new Item()
{
Id = "1",
Name = "Name1",
Value = "NotUpdated1"
});
}

[Test]
public void ShouldCombineTwoListsAndAddNewOnesUsingIdAsPrimaryKey()
{
List<Item> secondList = new List<Item>();
secondList.Add(new Item()
{
Id = "1",
Name = "NameUpdated1",
Value = "Updated1"
});
secondList.Add(new Item()
{
Id = "2",
Name = "NewOne",
Value = "New"
});

var combineList = new CombineList();
List<Item> combinedList = combineList.Update(firstList, secondList);
Assert.That(combinedList.Count, Is.EqualTo(2));
Assert.That(combinedList.FirstOrDefault(x => x.Id == "1").Value, Is.EqualTo("Updated1"));
Assert.That(combinedList.FirstOrDefault(x => x.Id == "2").Value, Is.EqualTo("New"));
}
}

public class CombineList
{
public List<Item> Update(List<Item> firstList, List<Item> secondList)
{
var result = from x in firstList
join y in secondList
on x.Id equals y.Id
select new Item()
{
Id = y.Id,
Name = y.Name,
Value = y.Value
};
return result.ToList();
}
}

最佳答案

如果我理解正确,您需要两个列表中的所有项目,但如果有 2 个项目具有相同的 ID,则您需要第二个列表中的项目。

我能想到的是:取两个列表的交集(使用 first 列表中的值),然后取第一个列表中的项目减去交集中的项目,然后取与第二个列表的结合。

var result = (secondList.Union(
firstList.Except(
from l in firstList
join r in secondList
on l.Id equals r.Id
select l
)
)).ToList();

关于c# - 如何使用 LINQ 合并 2 个列表并添加新列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548486/

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