比StriplingWarrior的(我认为),并略少的问题稍微简单的方法:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.First(), group => group.Key);
注意,这里假设你的ID是也独特的 - 如果两个不同的名字有相同的ID,ToDictionary
会失败。
另请注意,如果您有多个具有相同名称的ID,则假设您并不在乎地图中的哪一个。如果你想确保它的(说)最早的名称,你可以这样做:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.OrderBy(x => x).First(),
group => group.Key);
现在它可能是,将做可查询在错误的点可枚举的过渡,所以你可能想:
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);
这是更容易做数据库内的所有排序等一气呵成......我认为 ...这是值得检查记录,虽然。
当两行具有相同的“名称”时会发生什么?这些行中的任何一行都应该返回?或者第一个?或者是其他东西? – svick