比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