linq - 连接三个表并使用左外连接

标签 linq linq-to-entities linq-to-objects

我有三张 table 。他们中的两个平等地加入,但一个需要左翼加入。我在 linq 中找到了很多代码来执行此操作,但仅在两个表之间。

这是我试图在 LINQ 中重新编码的 SQL 代码。

   SELECT PRSN.NAME
       ,CO.NAME
       ,PROD.NAME
   FROM PERSON PRSN
     INNER JOIN COMPANY CO ON PRSN.PERSON_ID = CO.PERSON_ID
     LEFT OUTER JOIN PRODUCT PROD ON PROD.PERSON_ID = PROD.PERSON_ID;

这是我用作基础的 LINQ 代码片段。我只是无法通过 LINQ 和左外连接拼凑第三个表(我的示例 SQL 中的产品)。样本位于两个表之间。感谢您的任何提示。
   var leftOuterJoinQuery =
    from category in categories
    join prod in products on category.ID equals prod.CategoryID into prodGroup
    from item in prodGroup.DefaultIfEmpty(new Product{Name = String.Empty, CategoryID = 0})
        select new { CatName = category.Name, ProdName = item.Name };

迈克尔

最佳答案

这个怎么样:

var loj = (from prsn in db.People
           join co in db.Companies on prsn.Person_ID equals co.Person_ID
           join prod in db.Products on prsn.Person_ID equals prod.Person_ID into prods
           from x in prods.DefaultIfEmpty()
           select new { Person = prsn.NAME, Company = co.NAME, Product = x.NAME })

编辑:如果你想对所有表进行左外连接,你可以这样做:
var loj = (from prsn in db.People
           join co in db.Companies on prsn.Person_ID equals co.Person_ID into comps
           from y in comps.DefaultIfEmpty()
           join prod in db.Products on prsn.Person_ID equals prod.Person_ID into prods
           from x in prods.DefaultIfEmpty()
           select new { Person = prsn.NAME, Company = y.NAME, Product = x.NAME })

关于linq - 连接三个表并使用左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145938/

相关文章:

c# - 使用 Linq 索引属性?

c# - LINQ 本身是否支持将集合一分为二?

c# - 在 C# 中构建动态 linq 查询的最佳方法?

xml - 您如何在 Linq To Xml 中防范 Null Reference 异常?

c# - Linq LIKE 功能

c# - 如何从我的 C# 集合中返回不同的元素?

c# - 使用 linq 将 json 字符串解析为对象

c# - 为什么 Entity Framework 在从 View 中选择时创建子查询?

asp.net-mvc - 将 LINQ to EF 投影到 View 模型时出现异常。获取 "only parameterless constructor and initializers"异常

c# - LINQ 动态库 : How to extract count and list from IQueryable