它通过左连接与两个表交叉,在linq中有两个字段

时间:2017-10-30 10:15:36

标签: entity-framework linq linq-to-entities

我有一个问题。

我的查询包含:

left join tclientes b on b.codplaza=a.codplaza and b.codcli=a.codcli

在"和"它与表B交叉第二次表A,我想要使用linq的工具:

 var ret = Context.tH
            .GroupJoin(
                    Context.t,
                    tH => tH.cod,
                    t => t.cod,
                    (x, y) => new { tH = x, t = y })
            .Where(R => R.tH.codplaza_usu == placeCode && R.tH.codusuario == codusuario && R.tH.codcli != -1)
            .SelectMany(
                xy => xy.t.DefaultIfEmpty(),
                (x, y) => new { tH = x.tH, t = y })
            .Select(s => new TClientesDMO
            {
                codplaza = s.tH.codplaza,
            }).ToList();

如何添加左连接的第二个条件?

1 个答案:

答案 0 :(得分:0)

据我了解您的问题,查询和提到的"双重交叉",可能的解决方案或方法可能是:

var result = (from th in Context.tH
    join t in Context.t on new {CodPlaza = th.codplaza, CodCli = th.codcli} equals new { CodPlaza = t.codplaza, CodCli = t.codcli }
    where th.codplaza_usu == placeCode 
        && th.codusuario == codusuario 
        && th.codcli != -1
    select new TClientesDMO
    {
        codplaza = th.codplaza,
    }).ToList();

此查询将返回codplaza的所有tHt与属性codplazacodcli上的tH相关联。此外,只有codplaza_usu == placeCode个对象会被考虑,其中包含codusuario == codusuariocodcli != -1DefaultIfEmpty()。 我希望它符合您的需求。

是否有必要让#34;空&#34; (SELECT DISTINCT CA.colstr FROM str_matching s1 JOIN str_matching s2 ON s1.colstr <> s2.colstr AND (s2.colstr LIKE s1.colstr + '%' OR s1.colstr LIKE s2.colstr + '%' ) CROSS APPLY (VALUES(s1.colstr), (s2.colstr)) as CA(colstr) ; )条目也是? 如果查询不符合您的预期结果,请提供更多信息。