C# 如何将LINQ查询分组到字典<;字符串,字符串>;
我有一个简单的模型,我正在尝试分组:C# 如何将LINQ查询分组到字典<;字符串,字符串>;,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个简单的模型,我正在尝试分组: public class PracticeArea { [Key] public int PracticeAreaID { get; set; } public string Name { get; set; } public string Type { get; set; } } 我想按类型分组,如何转换: var practiceAreas = (from c in db.PracticeAreas
public class PracticeArea
{
[Key]
public int PracticeAreaID { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
我想按类型分组,如何转换:
var practiceAreas = (from c in db.PracticeAreas
select c).
致:
但这给了我一个强制转换错误如果类型和名称都是字符串,则不应引发
强制转换
异常:
practiceAreas.ToDictionary(x => x.Type, x => x.Name)
但是,如果某一类型存在不止一个练习区域,则这将导致失败。您可以使用以下选项之一:
1) 使用查找而不是字典。它将按区域类型创建名称查找
practiceAreas.ToLookup(pa => pa.Type, pa => pa.Name)
2) 使用字典和集合来保存每种类型的所有名称,例如字典
:
3) 在单个字符串中连接所有名称
practiceAreas.GroupBy(pa => pa.Type)
.ToDictionary(g => g.Key, g => String.Join("," g.Select(pa => pa.Name)))
哪种类型的强制转换错误?预期的结果是什么?如果您按类型分组,那么您希望字典的其他值是什么?计数名称的逗号列表?如果您在一个步骤中完成所有操作,它是否有效:
var practiceAreas=(从db.practiceAreas中的c选择c)。ToDictionary(x=>x.Type,x=>x.Name)代码>?您不能将practiceAreas
作为第一部分的一种类型,而将其作为第二部分的一种完全不同的类型(请参见var
和dynamic
之间的区别)。
practiceAreas.ToLookup(pa => pa.Type, pa => pa.Name)
practiceAreas.GroupBy(pa => pa.Type)
.ToDictionary(g => g.Key, g => g.Select(pa => pa.Name).ToList())
practiceAreas.GroupBy(pa => pa.Type)
.ToDictionary(g => g.Key, g => String.Join("," g.Select(pa => pa.Name)))