繁体   English   中英

在不同表上具有多个LEFT OUTER JOINS的SQL的LINQ

[英]LINQ for an SQL with multiple LEFT OUTER JOINS on different tables

我正在尝试创建一个包含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吗?

您可以像下面这样简单地将查询转换为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 Join此堆栈线程

更新:这是查询的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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM