Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
C# 通过使用LINQ筛选两个列表来创建字典_C#_Linq - Fatal编程技术网

C# 通过使用LINQ筛选两个列表来创建字典

C# 通过使用LINQ筛选两个列表来创建字典,c#,linq,C#,Linq,我需要一种方法来创建一个字典,方法是使用linq语句从两个列表中筛选数据。例如: list1: { 1, 2, 3 } list2: { <apple, 1>, <peach, 3> } list1:{1,2,3} 清单2:{,} 最终的字典应该是这样的:{,} 应跳过列表1中的2 请了解如何使用linq?加入列表并将结果放入字典来解决此问题 var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)

我需要一种方法来创建一个
字典
,方法是使用linq语句从两个列表中筛选数据。例如:

list1: { 1, 2, 3 }
list2: { <apple, 1>, <peach, 3> }
list1:{1,2,3}
清单2:{,}
最终的字典应该是这样的:
{,}

应跳过列表1中的
2


请了解如何使用linq?

加入列表并将结果放入字典来解决此问题

var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)
             .ToDictionary(o=>o.Id);

尝试使用一个

加入列表,并将结果放入字典

var d = list1.Join(list2, i=>i, o=>o.Id, (i,o)=>o)
             .ToDictionary(o=>o.Id);
如果您可以使用

将两个列表合并为一个列表,然后生成字典,请尝试

比如:

var result = list1.Zip(list2, (l, r) => Tuple.Create(l, r))
                  .ToDictionary(v => v.Item1, v => v.Item2);
可以使用将两个列表合并为一个列表,然后生成字典

比如:

var result = list1.Zip(list2, (l, r) => Tuple.Create(l, r))
                  .ToDictionary(v => v.Item1, v => v.Item2);

如果需要,您可以使用
SelectMany

var result = (from l1 in list1
              from l2 in list2
              where l1 == l2.Id
              select new 
              {
                  Id = l1,
                  Name = l2.Name
              }).ToDictionary(k=>k.Id, v=>v.Name);

如果需要,您可以使用
SelectMany

var result = (from l1 in list1
              from l2 in list2
              where l1 == l2.Id
              select new 
              {
                  Id = l1,
                  Name = l2.Name
              }).ToDictionary(k=>k.Id, v=>v.Name);

没有LINQ你怎么办?这可能会帮助您获得基于Linq的解决方案。只需自己尝试一下。list2看起来已经像一本字典:apple,key->1>,我认为您应该为您的模型提供更多信息,可能它们更复杂…@Soren其对象具有我应该使用的2个属性(apple,1),而不是没有LINQ您将如何操作?这可能会帮助您获得基于Linq的解决方案。我想你应该为你的模型提供更多的信息,也许它们更复杂…@Soren它的对象有两个我应该使用的属性(苹果,1)如果列表1和列表的长度与所讨论的不一样,会发生什么情况?过滤器在哪里?@qxg它将在第一个列表的末尾停止创建一个
ZipLong
,当较短的列表用完时,它会放入一个默认元素。@devhedgehog问题不是很清楚,无法确定放在哪里。可以在
Zip
之前的输入列表上或在
Zip
的输出上执行。如果列表1和列表的长度与问题中的长度不同,会发生什么情况?这里的过滤器在哪里?@qxg它将在第一个列表的末尾停止创建
ZipLong
,当较短的列表被删除时,它会放入一个默认元素“精疲力竭”。@devhedgehog的问题不是很清楚,无法确定该放在哪里。可以在
Zip
之前的输入列表上或在
Zip
@HimBromBeere的输出上执行这是一个用于
SelectMany
@HimBromBeere的linq
查询语法这是一个用于
SelectMany