我还是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”分组的最早(最远的)“戳记”日期字段(最初在表3上的“标记”,最初在表3和表1上的“emplid”)
从联合表中只能为每个“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()
如果你能帮我这么做,我会给你信任。但如果你能做下一件事,在我给出信用之前,我会给予 你 信用。
然后在那个结果中我需要为每个“组织”返回一个唯一的“emplid”计数。所以最终结果如下:
org | count | (other columns)
------------------------------------------------
12345 | 15 | etc...
54321 | 7 | etc...
感谢帮助一个菜鸟。
答案 0 :(得分: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()
答案 1 :(得分: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
希望这有助于其他人...