Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过lambda用c#创建字典_C#_Linq_Lambda - Fatal编程技术网

通过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}
是完全有效的。它是一个集合初始值设定项。