我有一个看起来像这样的对象:
class Model
{
public string Category {get;set;}
public string Description {get;set;}
}
目前我正在使用Linq获取这些对象的完整列表,然后手动设置字典,如下所示:
List<Model> models = //get list from repository and then with linq order them by category and description
Dictionary<string, List<Model>> dict= new Dictionary<string, List<Model>>();
foreach (var m in models) {
if (dict.ContainsKey(m.Category))
{
dict[m.Category].Add(m);
}
else
{
dict.Add(m.Category, new List<Model> { m });
}
}
这样我就可以使用密钥访问某个类别的所有模型。
有没有办法用LINQ查询直接生成字典?
谢谢!
答案 0 :(得分:6)
答案 1 :(得分:5)
是的,有一种方法,但要完成这项工作,你需要先将它们分组(以避免重复的密钥):
var dict = (from model in models
group model by model.Category into g
select g).ToDictionary(x => x.Key, x => x.ToList());
(当你在它的时候,我想知道这个和.ContainsKey()方式的表现是什么)
答案 2 :(得分:0)
你可以使用Aggregate()来隐藏foreach逻辑,但是作为我上次建议说的OP,它是Linq服装中的一个循环。
怎么样:
var myDictionary = (from m in models
group m by m.Category into theGroup
select new {Key = m.Category, Value = theGroup.ToList()))
.ToDictionary(x=>x.Key, x=>x.Value);