2009-10-15 45 views
0

我對LINQ還是一個新手,我已經爲查詢花費了好幾天的時間,並準備投降,無視這個問題。特定的VB Linq查詢幫助

我需要: 加入3個表(總共2個數據庫)。讓我們稱之爲 表1表2 表3

表1加入到表2中的 「組織」

結果加入到表3的 「EMPLID」

過濾器(在哪裏):

Table3.success = true

Table3.appcode =「neo」

Tab le1.empl_rcd = 0

起始日期(一個我可以在傳遞一個變量)

END_DATE(一說我可以通過一個變量)

分組:(我認爲是分組如何)

構成連接表必須爲每個「emplid」分組(最初的「emplid」)選擇最早的(最遠的過去的)「戳記」日期字段(原本在表3上的「emplid」和表1)

從加入表mu ST只選擇每個「EMPLID」分組最新(最近)「effdt」日期字段(在表1「effdt」原來,最初在表3和表1「EMPLID」)

選擇:

我需要從先前的邏輯中選擇所有返回的行。我可以弄清楚如何篩選我需要的最後一行。

這裏是我得到執行的最後一件事,它可能給你的我在做什麼的想法:

query = (From j In db.table1s _ 
Join a In db.table3s _ 
On j.EMPLID Equals a.emplid _ 
Join d In db.table2s _ 
On d.ORG Equals j.Org _ 
Where a.appcode = "neo" _ 
Where a.success = True _ 
Select a.appcode, j.effdt, a.stamp, j.EMPLID, _ 
d.ORGANIZATION_DESCRIPTION, d.DEPARTMENT_DESCRIPTION, d.VP_DESCRIPTION, _ 
a.success _ 
Distinct).AsQueryable().AsEnumerable() 

如果你能讓我到這地步,我給你的信用。但是如果你能做下一件事情,在我發放信用卡之前,我會給YOU credit。

然後超出該結果我需要返回每個「組織」的唯一「emplid」計數。所以最終的結果將如下所示:

org |  count | (other columns) 
------------------------------------------------ 
12345 |  15  |  etc... 
54321 |  7  |  etc... 

感謝您協助noob。

回答

0

我結束了使用此查詢這可能不是最高效,但它的工作原理。我最大的問題是我不知道如何正確地進行子查詢。

query = From final In _ 
     (From subfinal In _ 
      (From countdata In _ 
       (From a In _ 
        (From aa In db.table3s _ 
        Where aa.appcode = "neo" _ 
        Where aa.success = True _ 
        Group By aa.emplid Into Group _ 
        Select emplid = Group.Min(Function(f) f.emplid), _ 
          stampMin = Group.Min(Function(o) o.stamp) _ 
        ) _ 
       Join j In _ 
        (From jj In db.table1s _ 
        Where jj.empl_rcd = 0 _ 
        Group By jj.EMPLID Into Group _ 
        Select EMPLID = Group.Max(Function(m) m.EMPLID), _ 
         EffDate = Group.Max(Function(z) z.effdt) _ 
        ) _ 
       On j.EMPLID Equals a.emplid _ 
       Join jorg In _ 
        (From jj2 In db.table1s _ 
        Where jj2.empl_rcd = 0 _ 
        Select jj2.EMPLID, jj2.Org, jj2.effdt _ 
        ) _ 
       On j.EMPLID Equals jorg.EMPLID _ 
       And j.EffDate Equals jorg.effdt _ 
       Select j.EMPLID, a.stampMin, j.EffDate, jorg.Org _ 
       Distinct) _ 
      Where countdata.stampMin < EndDate _ 
      And countdata.stampMin > StartDate _ 
      Group By countdata.Org Into Group _ 
      Select count = Group.Count, Org = Org _ 
      ) _ 
     Select subfinal.Org, subfinal.count _ 
     ) _ 
     Join d In _ 
      (From dd In db.table2s _ 
      Select dd.ORG, dd.ORGANIZATION_DESCRIPTION, dd.DEPARTMENT_DESCRIPTION, _ 
        dd.VP_COLLEGE_DESCRIPTION _ 
      ) _ 
     On final.Org Equals d.ORG _ 
    Select final.count, final.Org, Org_desc = d.ORGANIZATION_DESCRIPTION, _ 
    Dept_descr = d.DEPARTMENT_DESCRIPTION, Coll_descr = d.VP_COLLEGE_DESCRIPTION 

希望這可以幫助其他人...

0

這不完全清楚你的各種EMPLID分組的需求如何與計數的員工,但是這應該讓你開始:

query = From j In db.table1s _ 
     Join a In db.table3s On j.EMPLID Equals a.emplid _ 
     Join d In db.table2s On d.ORG Equals j.Org _ 
     Where a.appcode = "neo" _ 
     Where a.success = True _ 
     Group By j.Org, d.ORGANIZATION_DESCRIPTION Into Count() 

VB Group By on MSDN