如何将此SQL语句转换为LINQ查询?

时间:2015-01-29 15:19:27

标签: c# sql linq

我有这个非常简单的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

2 个答案:

答案 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)

无论如何,谢谢你的帮助!