SQL查询无法转换为LINQ

问题描述 投票:2回答:1

当我试图将这段SQL转换为LINQ时,我收到了这个错误:

SQL无法转换为LINQ:在当前数据上下文中找不到表[GL]。

但在SQL中它工作正常。

这是我的SQL查询:

SELECT  itm.Id ,
        ISNULL(itm.Debit, 0) AS Debit ,
        ISNULL(itm.Credit, 0) AS Credit ,
        itm.State ,
        itm.DocCreateDate ,
        ISNULL(itm.Num, 0) AS Num ,
        ISNULL(itm.DocTypeRef, 0) AS DocTypeRef ,
        itm.Year ,
        itm.Month ,
        ISNULL(itm.DebitCount, 0) AS DebitCount ,
        ISNULL(itm.CreditCount, 0) AS CreditCount ,
        itm.DL ,
        itm.DL2 ,
        itm.DL3 ,
        itm.DL4 ,
        itm.DL5 ,
        itm.DL6 ,
        itm.DL7 ,
        ISNULL(itm.FCRef, 0) AS FCRef ,
        itm.FollowUpNum ,
        ISNULL(itm.BranchRef, 1) AS BranchRef ,
        itm.DocHeaderRef ,
        ISNULL(itm.RowNum, 0) AS RowNum ,
        ISNULL(itm.DailyNum, 0) AS DailyNum ,
        ISNULL(itm.TempNum, 0) AS TempNum ,
        ISNULL(itm.RefNum, 0) AS RefNum ,
        itm.Descript ,
        itm.Count ,
        itm.FollowUpDate ,
        itm.FCVal ,
        itm.FCRateVal ,
        itm.FactorNum ,
        ISNULL(itm.DebitFCVal, 0) AS DebitFCVal ,
        ISNULL(itm.CreditFCVal, 0) AS CreditFCVal ,
        sl.Id AS SLRef ,
        sl.SLCode ,
        sl.Title AS SLTitle ,
        CASE WHEN ISNULL(sl.DLSRef, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL ,
        CASE WHEN ISNULL(sl.DLSRef2, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL2 ,
        CASE WHEN ISNULL(sl.DLSRef3, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL3 ,
        CASE WHEN ISNULL(sl.DLSRef4, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL4 ,
        CASE WHEN ISNULL(sl.DLSRef5, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL5 ,
        CASE WHEN ISNULL(sl.DLSRef6, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL6 ,
        CASE WHEN ISNULL(sl.DLSRef7, 0) > 0 THEN 1
             ELSE 0
        END AS HasDL7 ,
        CASE WHEN ISNULL(sl.HasFC, 0) > 0 THEN 1
             ELSE 0
        END AS HasFC ,
        1 AS HasFollow ,
        tl.Id AS TLRef ,
        tl.Title AS TLTitle ,
        tl.TLCode ,
        gl.Id AS GLRef ,
        gl.Title AS GLTitle ,
        gl.GLCode ,
        gl.Balance AS GLBalance
FROM    Acc.DocItem AS itm
        LEFT OUTER JOIN Acc.SL AS sl ON itm.SLRef = sl.Id
        LEFT OUTER JOIN Acc.TL AS tl ON sl.TLRef = tl.Id
        LEFT OUTER JOIN Acc.GL AS gl ON tl.GLRef = gl.Id
WHERE   ( itm.SLRef > 0 )

如果没有办法传递此错误,那么你能告诉我它的LINQ是否相等?

sql sql-server tsql
1个回答
1
投票

在linq中有一种方法可以做到这一点:

var q =
    from c in categories
    join p in products on c.Category equals p.Category into ps
    from p in ps.DefaultIfEmpty()
    select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName };

这是左外连接的主要思想,你在SQL查询中作为'as'的语法就像'as'一样。

© www.soinside.com 2019 - 2024. All rights reserved.