如何在C#中将SQL左连接查询转换为Linq到实体?

如何在C#中将SQL左连接查询转换为Linq到实体?,c#,sql-server,linq-to-entities,C#,Sql Server,Linq To Entities,我有一个表格:物料(ID、名称、物料属性) 我想使用Liq-to-Entities将上述SQL查询转换为Linq查询。 谢谢你的帮助 如果该表仅用于读取,则只需创建一个视图,然后在使用反向工程时,确保导入了视图 或者,如果您确实希望在LINQ中完成此操作,这里是MSDN示例 var innerJoinQuery = from cust in customers join dist in distributors on cust.City equals dist.City

我有一个表格:
物料(ID、名称、物料属性)

我想使用Liq-to-Entities将上述
SQL查询
转换为
Linq查询


谢谢你的帮助

如果该表仅用于读取,则只需创建一个视图,然后在使用反向工程时,确保导入了视图

或者,如果您确实希望在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,使所有列都是唯一的

,因为这种问题是你的朋友

我的建议是:

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来定制您的查询要求。

@Matthew您在导航属性上使用
包含
,而不是外键本身。是的,现在编辑太晚了,很遗憾。您好@Luke Franklin,我已经在您的回答行中编辑了您的查询,并在我的程序中使用了。但它显示了错误:“匿名类型在M2.ID处不能有多个同名属性!如何解决它?知道吗?这是因为随后获取值的方式将是materials.ID,并且在m.ID的开头将写入两个ID。Parentid=m.ID。”
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();