2017-11-25 208 views
-5

我有下面的代码:C#创建一个字典,通过拉姆达

var dict = new Dictionary<byte?, List<Id>>(); 
foreach (var record in Records) 
{ 
    if(record.SubId.HasValue) 
    { 
     dict.Add(SubIdsDictionary[record.SubId.Value], new List<Record> { record }); 
    } 
    else 
    { 
     dict.Add(IdsDictionary[record.Id.Value], new List<Record> { record }); 
    } 
} 

记录是记录一个name.In这个记录类我有身份证,SUBID和公司名单。每个名字的id都是强制性的,但是subid不是。所以,如果name有subid,那么我必须优先考虑subid,并且首先从字典SubIdsDictionary中获取新的sub id(因为subid是参考字典SubIdsDictionary中的关键字) subid作为关键字,整个记录作为新字典中的值字典。但如果名称不具有subid,那么我将使用id,并首先从引用字典IdsDictionary中获取新的id,并将新的id作为key并且value将是整个记录。 现在在新的字典键将混合ID和子和记录将价值列表

有人可以帮助我通过lambda转换此代码?

+0

任何帮助???????? – Remon

+0

'Dictionary >()'我认为你canot有一个字典键null,用来填充你的'新列表'使用“(”,not“{” –

+0

@CelsoLívero'new List {aT, anotherT}'是完全有效的。它是一个集合初始化器。 – pinkfloydx33

回答

2

您可以使用Linq的ToDictionary方法。

它不应该是这样的:

var dict = Records.ToDictionary(
    r => (r.SubId.HasValue ? SubIdsDictionary[r.SubId.Value] : IdsDictionary[r.Id.Value]), 
    r => new List<Record> {r} 
);