将SQL左连接转换为Linq表达式左连接

时间:2015-07-12 17:14:00

标签: c# sql linq entity-framework left-join

我有来自SQL的查询,我正在进行左连接。它工作正常。

SELECT Table1.Id, Table1.Comments, Table1.IdListDef  
FROM Table2 INNER JOIN Table1 ON Table2.Id = Table1.IdListDef  
LEFT JOIN Table3  
ON Table1.Id = Table3.IdComments  
WHERE Table1.IdListDef = 36 and Table2.IdRev = 1075 and Table3.IdAutor IS NULL

我需要将此查询从C#转换为Linq Expression。我该怎么做?我不知道如何转换包含左连接的查询。

2 个答案:

答案 0 :(得分:2)

看起来应该是这样的:

var result = (
    from item1 in table1
    join item2 in table2 on item1.IdListDef equals item2.Id
    join item3 in table3 on item1.Id equals item3.IdComments into finalGroup
    from finalItem in finalGroup.DefaultIfEmpty()
    where item1.IdListDef == 36 && item2.IdRev == 1075 && finalItem.IdAutor == null
    select new
    {
        item1.Id, item1.Comments, item1.IdListDef
    }).ToList();

除了您的评论,如果您愿意查看任何项目是否具有外部参数的ID,您可以使用linq 任何扩展方法:

bool idExists = result.Any(item => item.id == idAutor);

答案 1 :(得分:-1)

尝试这个查询

    VAR OBJLIST=(FROM A IN CONTEX.TABLE2
        FROM B IN CONTEX.TABLE1.WHERE(X=>X.IdListDef==a.Id && B.IdListDef==36 && B.IdRev==1075 )
        FROM C IN CONTEX.TABLE3.WHRE(X=>X.IdComments==a.Id).DefaultEmpty()
        where  C.IdAutor==NULL
        select new{a.Id, a.Comments, a.IdListDef }).ToList()