Немного более простой подход, чем у StriplingWarrior (я думаю) и с немного меньшим количеством проблем:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.First(), group => group.Key);
Обратите внимание, что это предполагает, что ваши идентификаторы также уникальны - если два разных имени имеюттот же идентификатор, ToDictionary
потерпит неудачу.
Также обратите внимание, что если у вас есть несколько идентификаторов с одним и тем же именем, предполагается, что вам все равно, какой из них указан на карте.Если вы хотите убедиться, что это (скажем) самое раннее имя, которое вы могли бы сделать:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.OrderBy(x => x).First(),
group => group.Key);
Теперь возможно, что это сделает переход Queryable to Enumerable в неправильную точку, поэтому вы могли бы want:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.Select(g => new { Name = g.OrderBy(x => x).First(), Id = g.Key })
.ToDictionary(g => g.Name, g => g.Id);
С большей вероятностью все упорядочивание и т. Д. Внутри базы данных выполняется за один раз ... Я думаю ... хотя стоит проверить журналы.