У меня есть DataTable, который я хотел бы преобразовать в словарь на 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;
}
Мой традиционный способ конвертировать его в словарьis:
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());
Это только дает мне первое появление предмета,Я застрял.Пожалуйста, помогите.