如何将此 SQL 语句传输到 LINQ 查询中?
How do I transfer this SQL statement into a LINQ query?
我有这个非常简单的 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
您可以将过滤器添加为:
select new
{
AuftragId = grp.Key.AUFTRAGID,
Date = grp.Where(c=>c.STATUS == 9).Max(s => s.CRTI)
}) on auf.AUFTRAGID equals a_s.AuftragId
我终于通过使用以下表达式让它工作了:
Date = grp.Where(g => g.CRTI == grp.Max(s => s.CRTI) && g.STATUS == 9).Max(s => s.CRTI)
谢谢你的帮助!
我有这个非常简单的 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
您可以将过滤器添加为:
select new
{
AuftragId = grp.Key.AUFTRAGID,
Date = grp.Where(c=>c.STATUS == 9).Max(s => s.CRTI)
}) on auf.AUFTRAGID equals a_s.AuftragId
我终于通过使用以下表达式让它工作了:
Date = grp.Where(g => g.CRTI == grp.Max(s => s.CRTI) && g.STATUS == 9).Max(s => s.CRTI)
谢谢你的帮助!