任何人都可以通过将此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__9e
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 \我的 文档\库\文档\ Visual Studio 2008 \ Projects \ LPB 优化\ LPBenchmarking_Web \ BusinessComponents \ BLL.vb:行 204 InnerException:
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
尝试将查询拆分为多个子查询,并查看哪些子查询有效(如果有):
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
注意我只编辑了你在SO中提供的代码 - 我没有在IDE中检查它的语法!