如何使用方法语法在 LINQ 连接中添加多个条件

How to add multiple conditions in LINQ join using method syntax

我需要在连接上添加多个条件。在下面的 LINQ 中,我需要添加这样的条件。并且需要在这些条件下使用来自不同实体的值。这需要仅使用此 方法语法 来完成。我能够在查询语法中做到这一点。但要求是在幕后它应该生成一个查询或尽可能少的查询。使用多个“from”或多个“join”的查询语法执行多个 SELECT 查询。

我的第二个问题是,在注释掉的行上,我需要根据 r4.VersionNo==r3.VersionNo 进行过滤。失败了。

, ppp => ppp.r2.KeyColumn, t => t.KeyColumn && t.MyID==r1.MyID && t.Column2==r2 .Column2, (ppp, t) => new { ppp, t })

尝试过(没用):

代码:

var result = repo1.Join(repo2, r1 => r1.KeyColumn, r2 => r2.KeyColumn, (r1, r2) => new { r1, r2 })
                 .Join(repo3, ppp => ppp.r2.KeyColumn, t => t.KeyColumn, (ppp, t) => new { ppp, t })
                 .Join(repo4, pppt => pppt.ppp.r2.KeyColumn, r4 => r4.VersionNo, (pppt, r4) => new { pppt, r4 })
                 .Select(a => new MyObject
                    {
                        KeyColumn = a.ppp.r1.KeyColumn,
                        AnotherKeyColumn = a.ppp.r2.AnotherKeyColumn,
                 })?.ToList();

现在可以了。它生成两个查询,与之前的许多查询相比,这很好。

变化:

r4 => new
{
    keycolumn1 = r4.keycolumn
    versioncolumn = r4.VersionNo
},
pppt => new 
{
    keycolumn1 = pppt.ppp.r2.KeyColumn
    versioncolumn = r4.VersionNo
},

最终代码:

var result = 
repo1.Join(repo2, r1 => r1.KeyColumn, r2 => r2.KeyColumn, (r1, r2) => new { r1, r2 })
    .Join(repo3, ppp => ppp.r2.KeyColumn, t => t.KeyColumn, (ppp, t) => new { ppp, t })
    .Join(repo4, 
        pppt => new 
        {
            keycolumn1 = pppt.ppp.r2.KeyColumn
            versioncolumn = r4.VersionNo
        },
        r4 => new
        {
            keycolumn1 = r4.keycolumn
            versioncolumn = r4.VersionNo
        },
        (pppt, r4) => new { pppt, r4 })
    .Select(a => new MyObject
    {
        KeyColumn = a.ppp.r1.KeyColumn,
        AnotherKeyColumn = a.ppp.r2.AnotherKeyColumn
    })?.ToList();