[c#]Linq 与多个联接

标签: Linq SQLServer C#
发布时间: 2017/2/28 22:19:15
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试着转换下面的 SQL 语句使用 linq 和多个联接的毛病 — — 我似乎失去了一些东西。

            SELECT DISTINCT
                  Test1 = Table1.Column1,
                  Test2 = 1,
                  Test3 = Table1.Column2,
                  Test4 = Table1.Column5,
                  Test5 = Table1.Column6
            FROM Table1
            LEFT JOIN Table2 ON Table1.Column1 = Table2.Column1
            INNER JOIN Table3 ON Table1.Column3 = Table3.Column3 
            WHERE Table3.Column4 IN (1,2,6) 

这里是 Linq 到目前为止︰

var TestQuery = Table1_Collection.Select(x => new
            {
                Test1 = Table1.Column1,
                Test2 = 1,
                Test3 = Table1.Column2,
                Test4 = Table1.Column5,
                Test5 = Table1.Column6
            })
            [joins go here]
            .Where("where stuff goes here");

有什么想法? 我不是这么多寻求援助与 .Where 我的联接。 我不清楚使用方法语法格式。

解决方法 1:

给你:

var results = Table3_Collection
    .Where(i => column4s.Contains(i.Column4))
    .Join(Table1_Collection, i => i.Column3, i => i.Column3, (i, j) => j)
    .Join(Table2_Collection, i => i.Column1, i => i.Column1, (i, j) => i)
    .Distinct(comparer);

在您不使用从表 2 中选择任何列你原始 SQL 查询中,所以您可以省略,加入。我包括以上,但请随时将其删除。

而且在此基础上,你的 C# 示例没有 Distinct,,因为它是在你原来的 SQL 查询,并且最有可能是你的意图包括它给你。而且,请别忘了来实现您自己的 IEqualityComparer。这里是一个示例︰

class Table1Comparer : IEqualityComparer<Table1>
{
    public bool Equals(Table1 x, Table1 y)
    {
        return x.Column1 == y.Column1
            && x.Column2 == y.Column2
            && x.Column3 == y.Column3
            && x.Column4 == y.Column4
            && x.Column5 == y.Column5
            && x.Column6 == y.Column6;
    }

    public int GetHashCode(Table1 obj)
    {
        return obj.GetHashCode();
    }
}
官方微信
官方QQ群
31647020