Linq: Метод var res = (Linq Expression).ToDictionary(p => p.ID) неработает с анонимными типами полученными в select выражения Linq.
Вот это работать будет
var res = (from item in SomeList
select new SomeClass()
{
ID = item.Id,
}
).ToDictionary<SomeClass, Int64>(p => p.ID);
А вот это нет
var res = (from item in SomeList
select new
{
ID = item.Id,
}
).ToDictionary(p => p.ID);
Чтоб это обойти нужно просто исопльзовать ToDictionary, принимающий два делегата Func, а не однин.
Например:
var res = (from item in SomeList
select new
{
ID = item.Id,
}
).ToDictionary(p => p.ID, p=>p);
Первый делегат вернет ключь, второй значение для словаря.
var res = (from item in SomeList
select new SomeClass()
{
ID = item.Id,
}
).ToDictionary<SomeClass, Int64>(p => p.ID);
А вот это нет
var res = (from item in SomeList
select new
{
ID = item.Id,
}
).ToDictionary(p => p.ID);
Чтоб это обойти нужно просто исопльзовать ToDictionary, принимающий два делегата Func, а не однин.
Например:
var res = (from item in SomeList
select new
{
ID = item.Id,
}
).ToDictionary(p => p.ID, p=>p);
Первый делегат вернет ключь, второй значение для словаря.
Комментарии
Отправить комментарий