我有以下表格结构。我想检索与每个组名的键对应的值,并将其插入到模型类
中表数据已使用ExecuteQuery
读取并存储在类对象列表中,在下面的示例中,我将返回4行。我需要将其转换为2行,列值以行的形式出现。
我现在编写了以下代码,但是有没有其他方法来验证它而没有明确地检查说Key == "GroupSpecificProperty1"
?
如果以后添加了第3类,我不必修改此代码
Result = results.GroupBy(p => p.GroupName )
.Select(g => new FinalModel()
{
GroupName = g.Select(p => p.GroupName ).FirstOrDefault(),
GroupSpecificProperty1 = g.Where(q => q.Key == "GroupSpecificProperty1").Select(v => v.Value).Cast<string>().FirstOrDefault(),
GroupSpecificProperty2= g.Where(q => q.Key == "GroupSpecificProperty2").Select(v => v.Value).Cast<string>().FirstOrDefault(),
}).ToList();
答案 0 :(得分:4)
results.GroupBy(p => p.GroupName)
.Select(g => new FinalModel
{
GroupName = g.Key,
Properties = g.ToDictionary(item => item.Key, item=> item.Value)
});
如果对于给定的GroupName
,密钥不是唯一的,并且您想要避免“密钥已存在”异常,那么您可以:
results.GroupBy(p => p.GroupName)
.Select(g => new FinalModel
{
GroupName = g.Key,
Properties = g.GroupBy(item => item.key)
.ToDictionary(innerGroup => innerGroup.Key,
innerGroup => innerGroup.Select(innerItem => innerItem.Value))
});
当然,如果更好地满足您的需求,您还可以使用LookUp替换外/内词典。