.net 使用多个表将SQL转换为Linq进行组联接

.net 使用多个表将SQL转换为Linq进行组联接,.net,vb.net,linq,linq-to-sql,group-by,.net,Vb.net,Linq,Linq To Sql,Group By,有人能帮我把这个SQL语句翻译成Linq吗 SELECT a.KPI, a.ProcessDate, a.Actual, lf.LPLocal, pf.LPProd, d.LocalDelta, d.ProdDelta FROM Actual AS a LEFT OUTER JOIN Local l ON l.Date = a.Date LEFT OUTER JOIN Prod p ON p.Date = a.Date LEFT OUTER JOIN Delta

有人能帮我把这个SQL语句翻译成Linq吗

SELECT a.KPI, a.ProcessDate, a.Actual, lf.LPLocal, pf.LPProd, d.LocalDelta, d.ProdDelta
FROM
    Actual AS a
    LEFT OUTER JOIN Local l ON l.Date = a.Date
    LEFT OUTER JOIN Prod  p ON p.Date = a.Date
    LEFT OUTER JOIN Delta d ON d.Date = a.Date
我做了一些研究,得出了以下结论:

Dim Xq1 = (From a In tmpActual _
Group Join l In tmpLocal On l.Item("Dates") Equals a.Item("Dates") Into al = Group _
From x In al.DefaultIfEmpty() _
Group Join p In tmpProd On p.Item("Dates") Equals a.Item("Dates") Into ap = Group _
        From y In ap.DefaultIfEmpty() _
Group Join d In tmpDelta On d.Item("Dates") Equals a.Item("Dates") Into ad = Group _
From z In ad.DefaultIfEmpty() _
Select
    KPI = a.Item("KPI"), ProcessDate = a.Item("Dates"),
    AccountingActual = a.Item("AccountingActual"),
    LocalForecast = x.Item("LocalForecast"),
    ProdForecast = y.Item("ProdForecast"),
    Localdelta = z.Item("LocalDelta"),
    ProdDelta = z.Item("ProdDelta")).DefaultIfEmpty
但当我运行它时,它得到:

捕获到System.InvalidCastException Message=“无法强制转换类型为的对象 “d_u9e
1[VB$AnonymousType_6
7[System.Object,System.Object,System.Object,System.Object,System.Object,System.Object,System.Object]] 键入“System.Data.DataTable”。“
Source=“LPBenchmarking”StackTrace: 在LPBenchmarking.BLL.GetKPIFromPrime(PreKPIData C:\Documents中的ds、Int32异常值) 和设置\RSpalding.TCI\My 文档\库\文档\可视 Studio 2008\Projects\LPB 优化\LPBenchmarking\u Web\BusinessComponents\BLL.vb:line 204.例外情况:


任何帮助都将不胜感激。谢谢

尝试将查询拆分为多个子查询,并查看哪些子查询有效(如果有):


注意,我只编辑了您在中提供的代码,所以我没有在IDE中对其进行语法检查

请注意,您的原始SQL没有使用GROUPBY,并且您有输入错误:lf。和pf。应该是l。和p。大概
Dim alq = From a In tmpActual _
 Group Join l In tmpLocal On l.Item("Dates") Equals a.Item("Dates") Into al = Group

Dim apq = _
 From x In alq.DefaultIfEmpty() _
 Group Join p In tmpProd On p.Item("Dates") Equals a.Item("Dates") Into ap = Group

Dim adq = _
          From y In apq.DefaultIfEmpty() _
 Group Join d In tmpDelta On d.Item("Dates") Equals a.Item("Dates") Into ad = Group

Dim Xq = _
 From z In adq.DefaultIfEmpty() _
 Select
     KPI = a.Item("KPI"),
     ProcessDate = a.Item("Dates"),
     AccountingActual = a.Item("AccountingActual"),
     LocalForecast = x.Item("LocalForecast"),
     ProdForecast = y.Item("ProdForecast"),
     Localdelta = z.Item("LocalDelta"),
     ProdDelta = z.Item("ProdDelta")

Dim Xq1 = Xq.DefaultIfEmpty