C# 通过两个并发字典循环的Lambda表达式

C# 通过两个并发字典循环的Lambda表达式,c#,loops,dictionary,concurrency,lambda,C#,Loops,Dictionary,Concurrency,Lambda,我试图循环使用两个并发字典,如下面的代码,但是我想使用lambda表达式 foreach (var s in sb_eventdata) { foreach (var f in final_data) { if (s.Value.Car.Equals(f.Value.Car)) { Console.Writeline("Found!"); } } } var values=sb\u eventd

我试图循环使用两个并发字典,如下面的代码,但是我想使用lambda表达式

foreach (var s in sb_eventdata)
{  
    foreach (var f in final_data)
    {
        if (s.Value.Car.Equals(f.Value.Car))
        {
            Console.Writeline("Found!");
        }
    }
}
var values=sb\u eventdata.Where(k=>k.Value.Hometeam.Contains(??);


我真的不确定传递到contains中的是什么,我假设另一个lambda表达式,但是什么?

我认为您的朋友是Join()方法

在“LinqPad风格”中:


如果您只想知道两个字典是否共享至少一个值,可以使用以下任意值:

if(sb_eventdata.Any(s => 
    final_data.Any(f => s.Value.Car.Equals(f.Value.Car))))
         Console.WriteLine("Found!");
或包含:

if(sb_eventdata.Any(s => final_data.ContainsValue(s.Value)))
         Console.WriteLine("Found!");
如果要计算最终数据中有多少sb_事件数据:

sb_eventdata.Where(s => final_data.ContainsValue(s.Value)).Count();
您可以使用来查找列表中的相似项。 然后显示所有相似的项目

    var foo = sb_eventdata.Select(o => o.Value.Car).Intersect(final_data.Select(o => o.Value.Car));
    foreach (var item in foo)
    {

        Console.Writeline("Found!");

    }

与循环最接近的linq表达式是:

var sb_eventdata = new Dictionary<string, string>{ {"a", "a"}, {"b", "b"}};
var final_data = new Dictionary<string, string>{{"a", "a"}, {"b", "b"}, {"c","c"}};

var result = 
    // first loop
    sb_eventdata.Select(s => 
        // second loop
        final_data.Where(f => s.Value.Equals(f.Value)))
    // flatten results (returns results from the first dictionary)
    .SelectMany(x => x);
var sb_eventdata=新字典{{“a”,“a”},{“b”,“b”};
var final_data=新字典{{“a”,“a”},{“b”,“b”},{“c”,“c”};
var结果=
//第一圈
sb_事件数据。选择(s=>
//第二圈
最终_数据,其中(f=>s.Value等于(f.Value)))
//展平结果(从第一个字典返回结果)
.SelectMany(x=>x);

您的示例代码回答的问题是“列表A中的任何内容是否与列表B中的记录匹配?”(如果是,请写“找到”)。这与
var values=
所暗示的“给我列表A中与列表B中的记录匹配的记录”不同。要简化/澄清我的注释:是否要生成公共对象的列表(并将它们分配给
集合),或者如果存在匹配项(如
Console.Writeline
),是否要执行某些操作?如果要生成列表,请使用
Intersect
,要检测是否有结果,请使用
Any
。最后,如果要创建副作用(如在每个匹配项上打印“Found”)使用
ForEach
(假设它们是
List
s)。只要集合类型实现了
IEquatable
,就可以了。因为示例代码使用了
Equals
,我认为您的假设是可靠的。如果类型不可等额,您应该使用@AnonymousTroll建议的
加入
。谢谢!这返回了最终的_数据对象,我可以进一步处理它.
var sb_eventdata = new Dictionary<string, string>{ {"a", "a"}, {"b", "b"}};
var final_data = new Dictionary<string, string>{{"a", "a"}, {"b", "b"}, {"c","c"}};

var result = 
    // first loop
    sb_eventdata.Select(s => 
        // second loop
        final_data.Where(f => s.Value.Equals(f.Value)))
    // flatten results (returns results from the first dictionary)
    .SelectMany(x => x);