我有这个非常简单的SQL语句,我希望使用LINQ获取相同的数据,但我似乎无法找到正确的方法。
select A.AUFTRAGID,
A.AUFTRAGNR,
A.GESELLSCHAFTID,
A.DEBITORID,
A.DEBITOR_KOMMNR2,
A.DEBITOR_TEILELIEFERNR,
D.DEPOTID,
D.DEPOTNUM,
D.MATCHCODE,
D.NAME,
D.KS_ID
from AUFTRAG A
join DEPOT D on D.DEPOTID = A.DEPOTID and D.VALID = 1 and D.KS_ID = 1
where A.AUFTRAGID in
(select AUFTRAGID from AUFTRAG_STATUS where VALID = 1
and CRTI = (select max(CRTI) from AUFTRAG_STATUS where AUFTRAGID = A.AUFTRAGID)
and [STATUS] = 9)
我可以成功加入表[AUFTRAG]和[DEPOT],但是当涉及到最后一个where子句时,我无法弄清楚如何在LINQ中获取数据。
我期待着你的帮助。
更新 - 这是我到目前为止所做的:
var erfAuftr = (from auf in db.AUFTRAG
join dep in (from dep in db.DEPOT
where dep.KS_ID == 1
select dep) on auf.DEPOTID equals dep.DEPOTID
join a_s in
(from a_s in db.AUFTRAG_STATUS
group a_s by new
{
a_s.AUFTRAGID
} into grp
select new
{
AuftragId = grp.Key.AUFTRAGID,
Date = grp.Max(s => s.CRTI)
}) on auf.AUFTRAGID equals a_s.AuftragId
select new
{
AuftragId = auf.AUFTRAGID,
AuftragNr = auf.AUFTRAGNR,
DebitorId = auf.DEBITORID,
KVNr = auf.DEBITOR_KOMMNR2,
TL = auf.DEBITOR_TEILELIEFERNR,
DepotId = dep.DEPOTID,
DepotNum = dep.DEPOTNUM,
DepotMatchcode = dep.MATCHCODE,
DepName = dep.NAME1,
WEDate = a_s.Date
});
但我仍然不知道如何检查[STATUS] = 9
答案 0 :(得分:1)
您可以将过滤器添加为:
select new
{
AuftragId = grp.Key.AUFTRAGID,
Date = grp.Where(c=>c.STATUS == 9).Max(s => s.CRTI)
}) on auf.AUFTRAGID equals a_s.AuftragId
答案 1 :(得分:0)
我终于通过使用以下表达式来实现它:
Date = grp.Where(g => g.CRTI == grp.Max(s => s.CRTI) && g.STATUS == 9).Max(s => s.CRTI)
无论如何,谢谢你的帮助!