我正在从表中选择多个列(id,name)。我想找回具有不同名称的记录。我想知道如何在LINQ中这样做。
以下代码返回Dictionary<string,string>
return db.CourseTypes
.Select(ct => new { ct.Id, ct.Name})
.AsEnumerable()
.ToDictionary(kvp => kvp.Id.ToString(), kvp => kvp.Name);
}
如何确保在“名称”列中找回具有不同值的记录?
答案 0 :(得分:2)
比StriplingWarrior(我认为)稍微简单一点的方法,问题稍微少一些:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.First(), group => group.Key);
请注意,这假设您的ID 也唯一 - 如果两个不同的名称具有相同的ID,则ToDictionary
将失败。
另请注意,如果您有多个具有相同名称的ID,则假设您并不关心地图中的哪个ID。如果你想确定它(比如说)你能做的最早的名字:
return db.CourseTypes
.GroupBy(ct => ct.Name, ct => ct.Id)
.ToDictionary(group => group.OrderBy(x => x).First(),
group => group.Key);
现在可能会在错误的点上执行Queryable to Enumerable转换,因此可能想要:
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);
这更有可能一次性完成数据库中的所有排序...我想 ...但是值得检查日志。