gpt4 book ai didi

c# - LINQ 加入列表列表

转载 作者:行者123 更新时间:2023-11-30 15:32:24 25 4
gpt4 key购买 nike

使用 LINQ,我如何加入(内部加入)列表数据列表

示例数据:

List<List<string>> datas1 = new List<List<string>>();
datas1.add(new List() { "1", "Item 1" });
datas1.add(new List() { "2", "Item 2" });
datas1.add(new List() { "3", "Item 3" });

List<List<string>> datas2 = new List<List<string>>();
datas1.add(new List() { "1", "20" });
datas1.add(new List() { "2", "10" });

预期结果 List<List<string>> :

List("1", "Item 1", "20");
List("2", "Item 2", "10");

我试试

var result = datas1
.Join(datas2, d1 => datas1[0], d2 => datas2[0], (d1, d2) => { d1 })
.ToList();

我得到空结果,然后尝试:

var result = datas1
.Join(datas2, d1 => datas1[0][0], d2 => datas2[0][0], (d1, d2) => { d1 })
.ToList();

我得到每个数据 1 的重复结果。

最佳答案

您没有在联接的 lambda 表达式中使用参数 - 您使用了 datas1[0]datas2[0]而不是 d1[0]d2[0] .此外,您对结果的预测并没有给您想要的结果。

你的查询应该是这样的:

var result = datas1
.Join(datas2, d1 => d1[0], d2 => d2[0],
(d1, d2) => new List<string> { d1[0], d1[1], d2[1] })
.ToList();

或者您可以使用查询表达式:

var result = (from d1 in datas1
join d2 in datas2 on d1[0] equals d2[0]
select new List<string> { d1[0], d1[1], d2[1] })
.ToList();

(我个人认为在这种情况下我会坚持使用非查询表达式版本。)

但是,最好不要有 List<List<string>>虽然,但是要为所有数据使用适当的类型——结果可能使用匿名类型。例如,您可能会有类似的内容:

var result = datas1
.Join(datas2, d1 => d1.Id, d2 => d2.Id,
(d1, d2) => new { d1.Id, d1.Name, d2.Description })
.ToList();

然后您还可以将数字存储在 int 中值而不是字符串...

关于c# - LINQ 加入列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197839/

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