我有一个DataTable,想要在我的项目中将其转换为C#字典。我可以使用传统的编程方式来实现目标,但使用linq/lambda更加优雅。我尝试使用Lambda,但不知道如何将多个行flatten成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());
这只给我第一个项目的出现。我卡住了。请帮忙。
Dictionary
,而是要转换为Lookup
。 - Theodor Zoulias