.net 使用多个表将SQL转换为Linq进行组联接
有人能帮我把这个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
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_u9e1[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