Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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
LINQ:如何在多个字段上使用LINQ扩展方法样式进行连接?_Linq_Join_Field - Fatal编程技术网

LINQ:如何在多个字段上使用LINQ扩展方法样式进行连接?

LINQ:如何在多个字段上使用LINQ扩展方法样式进行连接?,linq,join,field,Linq,Join,Field,在下面的连接中,我希望使用多个字段来进行连接,而不是仅使用一个字段 var join = group.Join(procSums, g => g.DeptID, ps => ps.key.deptID, (g, ps)... 我发现的所有示例都使用查询样式来实现这一点,但我无法翻译它 谢谢 您需要传递lambda表达式,该表达式使用字段创建匿名类型。 例如: group.Join(procSums, g => new { g.DeptID, g.OtherField }, p

在下面的连接中,我希望使用多个字段来进行连接,而不是仅使用一个字段

var join = group.Join(procSums, g => g.DeptID, ps => ps.key.deptID, (g, ps)...
我发现的所有示例都使用查询样式来实现这一点,但我无法翻译它


谢谢

您需要传递lambda表达式,该表达式使用字段创建匿名类型。
例如:

group.Join(procSums, g => new { g.DeptID, g.OtherField }, ps => new { ps.key.deptID, ps.key.OtherField }, ...)

匿名类型必须完全匹配。

您只需基于新的匿名对象加入即可:

// ClasID is a placeholder, it could be any property you'd like
var join = group.Join(procSums,
                      g => new { g.DeptID, g.UnitLoc, g.Proc },
                      ps => new 
                            { 
                              DeptID = ps.key.deptID, 
                              UnitLoc = ps.key.unitLoc,
                              Proc = ps.key.procName 
                            },
                      (g, ps) => new { g, ps });

好的,这里是
var join=group.join(procSums,g=>new{g.DeptID,g.UnitLoc,g.Proc},ps=>new{ps.key.DeptID,ps.key.UnitLoc,ps.key.procName},(g,ps)=>new{g,ps});
但它有一个错误,表示无法推断类型Args。类型相同,它们完全匹配。@user259286-匿名类型中属性的名称(以及它们的类型)必须完全匹配。我将更新我的答案。