通过Lambda表达式进行多字段连接

时间:2012-03-16 20:14:12

标签: c# linq

我正在试图弄清楚如何在此引入多个字段匹配。现在我基于匹配的UserId加入公司表。但是,如果我想在c.SomeField = somevalue

中加入AND,该怎么办?
var companyUsers = users.Where(u => u.IsEmployee)
                        .Join(companies, 
                              u => u.UserId, c => c.UserId, 
                              (u, c) => u.UserId)
                        .ToList();

2 个答案:

答案 0 :(得分:3)

您需要加入匿名类型:

as.Join(bs, a => new { a.X, a.Y }, b => new { b.X, b.Y })

答案 1 :(得分:3)

如果somevalue是常量(即与用户无关),那么您应该首先过滤companies

var companyUsers = users.Where(u => u.IsEmployee)
                        .Join(companies.Where(c => c.SomeField == someValue),
                              u => u.UserId, c => c.UserId, (u, c) => u.UserId)
                        .ToList();

如果您需要将用户的两个字段加入公司的两个字段,请使用SLaks所示的匿名类型。