通过lambda用c#创建字典
我有以下代码:通过lambda用c#创建字典,c#,linq,lambda,C#,Linq,Lambda,我有以下代码: 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 {
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 });
}
}
var dict=newdictionary();
foreach(记录中的var记录)
{
if(record.SubId.HasValue)
{
dict.Add(subidsdirectionary[record.SubId.Value],新列表{record});
}
其他的
{
dict.Add(idsdirectionary[record.Id.Value],新列表{record});
}
}
Records是一个名称的记录列表。在这个记录类中,我有Id、SubId和Companyname。每个名称都必须有id,但subid不是。因此,如果名称有subid,那么我必须优先考虑subid,首先从字典SubIdsDictionary中获取新的subid(因为subid是ref dict SubIdsDictionary中的键),并将新的subid作为键,将整个记录作为新字典中的值dict。但是如果name没有subid,那么我将使用id,首先从reference dict IdsDictionary获取新id,并将新id作为键,值将是整个记录。
现在在新的字典中,键将是id和subid的混合,记录的值将是List
有人能帮我通过lambda转换此代码吗?您可以使用Linq的方法
应该是这样的:
var dict = Records.ToDictionary(
r => (r.SubId.HasValue ? SubIdsDictionary[r.SubId.Value] : IdsDictionary[r.Id.Value]),
r => new List<Record> {r}
);
var dict=Records.ToDictionary(
r=>(r.SubId.HasValue?subidsdirectionary[r.SubId.Value]:idsdirectionary[r.Id.Value]),
r=>新列表{r}
);
任何帮助?????Dictionary()
我认为你不能让字典键为null,要填充你的新列表
使用“(”,而不是“{@CelsoLívero新列表{aT,anotherT}
是完全有效的。它是一个集合初始值设定项。