【问题标题】:specific VB Linq Query help具体的 VB Linq 查询帮助
【发布时间】:2009-10-21 02:56:09
【问题描述】:

我还是 LINQ 的新手,我已经与一个查询搏斗了好几天,准备屈服于对这个问题的无知。

我需要: 加入 3 个表(总共 2 个数据库)。让我们打电话给他们 表格1 表2 表3

Table1 在 "org" 上连接到 Table2

结果在“emplid”上加入 Table3

过滤器(在哪里):

Table3.success = true

Table3.appcode = "neo"

Table1.empl_rcd = 0

start_date(我可以作为变量传入的日期)

end_date(我可以作为变量传入的日期)

分组:(我认为分组是你会怎么做的?)

从连接表中只能为每个“emplid”分组选择最早(最远过去)的“stamp”日期字段(“stamp”最初在 Table3 上,“emplid”最初在 Table3 和 Table1 上)

从联合表中只能为每个“emplid”分组选择最新(最近的)“effdt”日期字段(“effdt”最初在 Table1 上,“emplid”最初在 Table3 和 Table1 上)

选择:

我需要从前面的逻辑中选择所有返回的行。我可以弄清楚如何过滤我需要的最终行。

这是我要执行的最后一件事,它可能会让您了解我在做什么:

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()

如果你能让我走到这一步,我会给你荣誉。但如果你也能做下一件事,在我给予信任之前,我会给予信任。

然后在该结果中,我需要为每个“org”返回唯一“emplid”的计数。所以最终的结果是这样的:

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

感谢你帮助一个菜鸟。

【问题讨论】:

    标签: vb.net linq linq-to-sql


    【解决方案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 _
            Group By j.Org, d.ORGANIZATION_DESCRIPTION Into Count()
    

    VB Group By on MSDN

    【讨论】:

      【解决方案2】:

      我最终使用了这个查询,它可能不是最有效的,但它确实有效。我最大的问题是我不知道如何正确地进行子查询。

      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
      

      希望这对其他人有所帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        相关资源
        最近更新 更多