我想執行這個 LINQ 查詢,但是由于我在子句中將硬編碼更改5
為firNr
(區域變數),因此出現以下錯誤:where
System.AggregateException: "One or more errors occurred. (The LINQ expression 'DbSet<ArlArtikel>()
.LeftJoin(
inner: DbSet<LkoLagerkonto>(),
outerKeySelector: arl => arl.ArlArtikelnr,
innerKeySelector: lk => lk.LkoArtikelnr,
resultSelector: (arl, lk) => new {
<>h__TransparentIdentifier0 = new {
arl = arl,
lkList = lkList
},
lk = lk
})
.LeftJoin(
inner: DbSet<VlkVaLagerkontodispowerte>(),
outerKeySelector: <>h__TransparentIdentifier1 => <>h__TransparentIdentifier1.lk.LkoLagerkontolfdnr,
innerKeySelector: dw => dw.VlkLagerkontolfdnr,
resultSelector: (<>h__TransparentIdentifier1, dw) => new {
<>h__TransparentIdentifier2 = new {
<>h__TransparentIdentifier1 = <>h__TransparentIdentifier1,
dwList = dwList
},
dw = dw
})
.GroupJoin(
inner: DbSet<PtpPreistabpo>(),
outerKeySelector: <>h__TransparentIdentifier3 => <>h__TransparentIdentifier3.<>h__TransparentIdentifier2.<>h__TransparentIdentifier1.<>h__TransparentIdentifier0.arl.ArlArtikelnr,
innerKeySelector: pt => pt.PtpArtikelnr,
resultSelector: (<>h__TransparentIdentifier3, ptList) => new {
<>h__TransparentIdentifier3 = <>h__TransparentIdentifier3,
ptList = ptList
})' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.)"
這是我的代碼:
long firNr = 5;
var articles = from arl in context.ArlArtikels
join lk in context.LkoLagerkontos
on arl.ArlArtikelnr equals lk.LkoArtikelnr
into lkList
from lk in lkList.DefaultIfEmpty()
join dw in context.VlkVaLagerkontodispowertes
on lk.LkoLagerkontolfdnr equals dw.VlkLagerkontolfdnr into dwList
from dw in dwList.DefaultIfEmpty()
join pt in context.PtpPreistabpos
on arl.ArlArtikelnr equals pt.PtpArtikelnr into ptList
from pt in ptList.Where(a => a.PtpArlFirmennr == firNr && a.PtpIstnetto == 0).DefaultIfEmpty() // <--
where arl.ArlFirmennr == firNr
group new { arl, lk, dw, pt } by new
{ arl.ArlArtikelnr, lk.LkoArtikelnr, arl.ArlArtikelbez, pt.PtpPreis }
into articleGroup
select new ErpArticle()
{
Id = articleGroup.Key.ArlArtikelnr,
Title = articleGroup.Key.ArlArtikelbez,
Quantity = (int?)articleGroup.Sum(g => g.dw.VlkVerfLagermenge),
Price = articleGroup.Key.PtpPreis
};
var res = await articles.ToListAsync();
我發現如果我將變數宣告為 ,它會起作用const
,但我希望能夠更改它。任何人都可以解釋為什么我會收到此錯誤以及如何解決它,好嗎?
---編輯---
隨著@Svyatoslav Danyliv 的回答,我現在能夠撰寫作業代碼:
var articles = from arl in context.ArlArtikels
join lk in context.LkoLagerkontos
on arl.ArlArtikelnr equals lk.LkoArtikelnr
into lkList
from lk in lkList.DefaultIfEmpty()
join dw in context.VlkVaLagerkontodispowertes
on lk.LkoLagerkontolfdnr equals dw.VlkLagerkontolfdnr into dwList
from dw in dwList.DefaultIfEmpty()
// changes
join pt in context.PtpPreistabpos
.Where(pt => pt.PtpArlFirmennr == firNr && pt.PtpIstnetto == 0)
.DefaultIfEmpty()
on arl.ArlArtikelnr equals pt.PtpArtikelnr into ptList
from pt in ptList.DefaultIfEmpty()
where arl.ArlFirmennr == firNr
group new { arl, lk, dw, pt } by new { arl.ArlArtikelnr, lk.LkoArtikelnr, arl.ArlArtikelbez, pt.PtpPreis }
into articleGroup
select new ErpArticle() {
Id = articleGroup.Key.ArlArtikelnr,
Title = articleGroup.Key.ArlArtikelbez,
Quantity = (int?)articleGroup.Sum(g => g.dw.VlkVerfLagermenge),
Price = articleGroup.Key.PtpPreis
};
uj5u.com熱心網友回復:
EF Core sill 在 GroupJoin 翻譯中有限制。它僅適用于簡單的 LEFT JOIN,但當查詢變得復雜時它會失敗。我已經使用這種技術重寫了你有問題的部分:
var articles = from arl in context.ArlArtikels
join lk in context.LkoLagerkontos
on arl.ArlArtikelnr equals lk.LkoArtikelnr
into lkList
from lk in lkList.DefaultIfEmpty()
join dw in context.VlkVaLagerkontodispowertes
on lk.LkoLagerkontolfdnr equals dw.VlkLagerkontolfdnr into dwList
from dw in dwList.DefaultIfEmpty()
// changes
from pt in context.PtpPreistabpos
.Where(pt => arl.ArlArtikelnr == pt.PtpArtikelnr)
.Where(pt => pt.PtpArlFirmennr == firNr && pt.PtpIstnetto == 0)
.DefaultIfEmpty() // <--
where arl.ArlFirmennr == firNr
group new { arl, lk, dw, pt } by new
{ arl.ArlArtikelnr, lk.LkoArtikelnr, arl.ArlArtikelbez, pt.PtpPreis }
into articleGroup
select new ErpArticle()
{
Id = articleGroup.Key.ArlArtikelnr,
Title = articleGroup.Key.ArlArtikelbez,
Quantity = (int?)articleGroup.Sum(g => g.dw.VlkVerfLagermenge),
Price = articleGroup.Key.PtpPreis
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/498014.html