gpt4 book ai didi

c# - 使用 Linq/Lambda 将 DataTable 转换为字典

转载 作者:行者123 更新时间:2023-11-30 21:28:57 24 4
gpt4 key购买 nike

我有一个数据表,我想为我的项目将其转换为 C# 中的字典。我可以使用传统的编程方式来实现目标,但它不如使用 linq/lambda 优雅。我尝试使用 Lambda,但在如何将多行合并为 1 行时遇到了困难。

我有一个用于测试目的的模拟 DataTable。

static DataTable GetData()
{
DataTable table = new DataTable();
table.Columns.Add("Field1", typeof(string));
table.Columns.Add("Field2", typeof(string));

table.Rows.Add("A", "A1");
table.Rows.Add("A", "A2");
table.Rows.Add("B", "B1");
table.Rows.Add("A", "A3");
table.Rows.Add("C", "C1");
table.Rows.Add("D", "D1");
table.Rows.Add("A", "A5");

return table;
}

我将其转换为字典的传统方法是:

    Dictionary<string, ArrayList> t = new Dictionary<string, ArrayList>();
foreach (DataRow r in GetData().Rows)
{
string k = (string)r["Field1"];
string v = (string)r["Field2"];
if (!t.Keys.Contains(r["Field1"]))
{
t.Add(k, new ArrayList());
}
if (t.Values == null)
{
t[k] = new ArrayList();
}
t[k].Add(v);
}

如何使用 Linq 实现相同的目的?

我试过:

var res = GetData()
.AsEnumerable()
.GroupBy(row => row.Field<string>("Field1"))
.Select(grp => grp.First());

这只会给我第一次出现的项目。我卡住了。请帮忙。

最佳答案

实际上,您不想将其转换为字典,而是转换为 Lookup。 .这是一个例子:

var lookup = GetData().AsEnumerable()
.ToLookup(r => r.Field<string>("Field1"), r => r.Field<string>("Field2"));
foreach (var grouping in lookup)
{
Console.WriteLine(grouping.Key + ": " + String.Join(", ", grouping));
}

输出:

A: A1, A2, A3, A5
B: B1
C: C1
D: D1

关于c# - 使用 Linq/Lambda 将 DataTable 转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55856085/

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