у меня есть SQL-запрос установить:Возникли проблемы с Sql К Linq
select
sm.coddeposito as coddeposito,
rd.codart as codart,
ast.codsottotipo as codsottotipo,
ast.descrizionesottotipo as descrizionesottotipo,
sum(sm.GIACENZA * sm.QTA1UM) as giacenza1,
sum(sm.GIACENZA2UM * sm.QTA2UM) as giacenza2,
sum(sm.ordinato * sm.QTA1UM) as ordinato1,
sum(sm.ordinato2UM * sm.QTA2UM) as ordinato2,
sum(sm.impegnato * sm.QTA1UM) as impegnato1,
sum(sm.impegnato2UM * sm.QTA2UM) as impegnato2
from Programmi.dbo.SAN_STORICOMAG as sm
join programmi.dbo.san_righedocumenti
as rd on sm.IDTESTA = rd.idtesta and sm.rigadoc = rd.idriga
join programmi.dbo.SAN_EXTRARIGHEDOC
as erd on rd.idtesta = erd.idtesta and rd.idriga = erd.idriga
join programmi.dbo.tk_tab_anasottotipi
as ast on erd.tk_codsottotipo = ast.CODSOTTOTIPO
where sm.codart like '%RTM%'
and erd.Tk_CodSottotipo <> ''
and erd.Tk_CodSottotipo is not null
group by
sm.coddeposito,
rd.codart,
ast.codsottotipo,
ast.descrizionesottotipo
order by
sm.coddeposito,
rd.codart,
ast.codsottotipo,
ast.descrizionesottotipo
Я нашел способ сделать группу заявлением, но он не работает, как мой SQL один делает. Это мой Linq запрос:
from sm in db.SAN_STORICOMAG
from rd in
db.SAN_RIGHEDOCUMENTI.Where(x => x.IDTESTA.Equals(sm.IDTESTA ?? 0)
&& x.IDRIGA.Equals(sm.RIGADOC ?? 0))
from erd in
db.SAN_EXTRARIGHEDOC.Where(x => x.IDTESTA.Equals(rd.IDTESTA)
&& x.IDRIGA.Equals(rd.IDRIGA))
from ast in
db.TK_TAB_ANASOTTOTIPI.Where(x => x.CODSOTTOTIPO.Equals(erd.Tk_CodSottotipo))
where sm.CODART.Contains("RTM")
&& erd.Tk_CodSottotipo != string.Empty
&& erd.Tk_CodSottotipo != null
orderby
sm.CODDEPOSITO,
rd.CODART,
ast.CODSOTTOTIPO,
ast.DESCRIZIONESOTTOTIPO
group new Result
{
CODDEPOSITO = sm.CODDEPOSITO,
CODART = rd.CODART,
DESCRIZIONEART = rd.DESCRIZIONEART,
CODSOTTOTIPO = ast.CODSOTTOTIPO,
DESCRIZIONESOTTOTIPO = ast.DESCRIZIONESOTTOTIPO,
GIACENZA1 = (sm.GIACENZA * sm.QTA1UM) ?? 0,
GIACENZA2 = (sm.GIACENZA2UM * sm.QTA2UM) ?? 0
}
by new
{
sm.CODDEPOSITO,
rd.CODART,
ast.CODSOTTOTIPO,
ast.DESCRIZIONESOTTOTIPO
}
into x
from xx in x
select xx
Другая проблема заключается в том, что с этим запросом LINQ, я не могу получить доступ к членам внутри нее, после того, как группы по декларации.
Когда LINQ побежал у него есть количество членов? "в x из xx в x" звучит как плохой бит именования происходит там .. Что произойдет, если вы создадите свою структуру, вы создаете первый бит имен linq, а не только новый {}? поэтому новый {Coddepostio = sm.CODDEPOSTIO ..etc} – BugFinder
Честно говоря, с комплексными запросами (и этот не слишком сложен каким-либо образом), как правило, намного проще создавать представление SQL, а затем создавать EF-модель в C# на основе этого Sql View. Это также позволит вам более легко подстроить sql, как вам удобно, без необходимости повторять запрос Linq в C#, чтобы узнать, что он производит в Sql. – Igor
Вам не хватает «левого внешнего соединения»? См. Ниже: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng