【问题标题】:LINQ for an SQL with multiple LEFT OUTER JOINS on different tables用于在不同表上具有多个 LEFT OUTER JOINS 的 SQL 的 LINQ
【发布时间】:2020-01-16 20:05:54
【问题描述】:

我正在尝试创建一个包含 LEFT 外连接的 LINQ 查询。有一些例子,但我有一些不同的场景

Select * from A_TABLE
LEFT OUTER JOIN B_TABLE ON A_TABLE.Id = B_TABLE.A_TABLE_Id
LEFT OUTER JOIN C_TABLE ON B_TABLE.Id = C_TABLE.B_TABLE_Id

第二个连接不在 A_TABLE 它是 B_TABLE 和 C_TABLE

我们可以将其转换为 LINQ 吗?

【问题讨论】:

    标签: c# sql linq sql-to-linq-conversion


    【解决方案1】:

    您可以像这样简单地将查询转换为 linq 查询:

    var results = (from a in A_TABLE
                   join b in B_TABLE
                   on a.A_TABLE_Id equals b.A_TABLE_Id into ab
                   from b in ab.DefaultIfEmpty()
                   join c in C_TABLE_List on b.B_TABLE_Id equals c.B_TABLE_Id
    
                   select new
                       {
                         ClassAProperty1 = a.Property1,
                         ClassBProperty1 = b.Property1,
                         ClassCProperty1 = c.Property1
                       }).ToList();
    

    您可以随时继续加入表格。

    不要忘记将 Property# 更改为所需的属性名称。

    如需了解更多信息,请查看LINQ Left Outer Jointhis stack thread

    更新: 这是查询的 Lambda 表达式版本:

    var result = A_TABLE
                 .GroupJoin(B_TABLE,
                     a => a.A_TABLE_Id,
                     b => b.A_TABLE_Id,
                     (a, b) =>
                     new {
                           tableAProperty1 = a.Property1,
                           tableAProperty2 = a.Property2, /* You cannot access this property in next join if you don't add it here */
                           B_TABLE = b.FirstOrDefault() /* This is the way to access B_TABLE in next join */
                     }).GroupJoin(C_TABLE,
                           ab => ab.B_TABLE.B_TABLE_Id,
                           c => c.B_TABLE_Id,
                           (ab, c) =>
                           new {
                                 ab.tableAProperty1,
                                 B_TABLEProperty2 = ab.B_TABLE.Property2,
                                 C_TABLE = c.FirstOrDefault()
                                }).ToList();
    

    【讨论】:

    • 非常感谢..我可以输入 lambda 表达式吗?
    • bb => bb.b.Id 未编译。 bb.b 是一个可枚举的集合。
    • 很抱歉看到这个问题太晚了。我已经编辑了两个代码 sn-ps。
    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2020-10-02
    • 2010-12-24
    相关资源
    最近更新 更多