Vb.net 特定VB Linq查询帮助

Vb.net 特定VB Linq查询帮助,vb.net,linq,linq-to-sql,Vb.net,Linq,Linq To Sql,我对LINQ还是个新手,我已经为一个问题挣扎了好几天,准备在这个问题上屈服于无知 我需要: 在总共2个数据库上连接3个表。让我们给他们打电话 表1 表2 表3 表1连接到组织上的表2 结果与emplid上的表3关联 过滤器,其中: 表3.1成功=正确 表3.appcode=neo 表1.emp_rcd=0 开始日期一个我可以作为变量传入的日期 结束日期我可以作为变量传入的日期 分组:我认为分组是你应该怎么做的 表格合并表必须仅为表3、表3和表1中的每个emplid分组戳记选择最早、最远的过去戳记

我对LINQ还是个新手,我已经为一个问题挣扎了好几天,准备在这个问题上屈服于无知

我需要: 在总共2个数据库上连接3个表。让我们给他们打电话 表1 表2 表3

表1连接到组织上的表2

结果与emplid上的表3关联

过滤器,其中:

表3.1成功=正确

表3.appcode=neo

表1.emp_rcd=0

开始日期一个我可以作为变量传入的日期

结束日期我可以作为变量传入的日期

分组:我认为分组是你应该怎么做的

表格合并表必须仅为表3、表3和表1中的每个emplid分组戳记选择最早、最远的过去戳记日期字段

从合并表中,必须仅为每个emplid分组选择最新的effdt日期字段,effdt最初在表1中,emplid最初在表3和表1中

选择:

我需要从前面的逻辑中选择所有返回的行。我可以找出如何过滤最后需要的行

这是我最后要做的一件事,它可能会让你知道我在做什么:

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()
如果你能让我走到这一步,我会相信你的。但如果你也能做下一件事,在我给你信用之前,我会给你信用

然后根据该结果,我需要返回每个组织的唯一emplid计数。所以最终的结果会是:

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

感谢您帮助解决问题。

目前还不清楚您的各种员工ID分组要求与员工计数之间的关系,但这应该让您开始:

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

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

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
希望这对其他人有帮助