如何在C#中将SQL左联接查询转换为Linq到Entity

本文关键字:转换 查询 Linq Entity 中将 SQL | 更新日期: 2023-09-27 18:22:43

我有一个表:Material(ID,Name,MAterialParentID)

SELECT  c1.ID,c1.Name as ParentName,c2.id,c2.Name
FROM    Material c1 Left JOIN Material c2
ON      c1.ID = c2.MaterialParentID
ID  ParentName  id  Name
1   Aluminium   2   Cavity
1   Aluminium   3   Copper
1   Aluminium   4   Flooring
2   Cavity     NULL NULL
3   Copper     NULL NULL
4   Flooring   NULL NULL
5   Glass      NULL NULL

我想使用Liq to Entities将上述SQL Query转换为Linq Query

感谢帮助!

如何在C#中将SQL左联接查询转换为Linq到Entity

如果表仅用于读取,您可以简单地创建一个视图,然后在使用反向工程时确保导入了视图。

或者,如果您确实希望在LINQ中完成此操作,这里是MSDN示例

var innerJoinQuery =
    from cust in customers
    join dist in distributors on cust.City equals dist.City
    select new { CustomerName = cust.Name, DistributorName = dist.Name };

这就是你的的样子

var Material = from M in db.Materials
                       join M2 in db.Materials on M.ID equals M2.MaterialParentID
                       select new {ParentID = M.ID, ParentName = M.Name, M2.ID, M2.Name };

我已经编辑了我上面的帖子,正如你所看到的,我已经包含了ParentID,使所有列都是唯一的

对于这种问题,linqpad是您的朋友。

我建议:

var materials = (from m in context.Material 
                let moreMaterials = (from m2 in context.Material where m2.id == m.id select m2).FirstOrDefault()
                select m).ToList();

但是您可以使用linqpad根据您的查询需求进行定制。