我有一个非常基本的SQL查询,我试图重现:
SELECT t1.id, t1.name, count(*), min(t2.inserted) as inserted_first, max(t2.inserted) as inserted_last
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON t1.id=t2.tbl1_id
WHERE t2.search=15
GROUP BY t1.id, t1.name
这对我来说很完美。它允许我按t1.id和t1.name的唯一项进行分组,但也可以获得该对出现的次数,以及链接表的t2.inserted的最小值和最大值。问题是,现在当我把它变成LINQ时,我得到:
Dim query =
From t1 In ent.TBL1
Join t2 In ent.TBL2 On t1.id Equals t2.tbl1_id
Where (t2.search=15)
Group t1 By t1.id, t1.name Into Group
Select New With {
.id = id,
.name = name,
.count = Group.Count,
.min_value = ???,
.max_Value = ???
}
我迷失了我能做些什么来选择最小值和最大值。 Group.Min如果与分组在同一个表中会起作用,但由于它在t2中,我无法引用它。此外,我不能将它添加到我的组中,因为它不同。
请注意,tbl2链接到tbl2.tbl1_id上的tbl1 - > tbl1.id.这也是我问题的一个愚蠢的例子,而不是真正的现场架构。
我感谢你对此事的任何帮助
答案 0 :(得分:1)
我不是VB人,但我想你想要:
Group t1, t2 By t1.id, t1.name Into Group
Select New With {
.id = id,
.name = name,
.count = Group.Count,
.min_value = Group.Min(Function(x) x.t2.Inserted),
.max_Value = Group.Max(Function(x) x.t2.Inserted)
}
请注意,每个组元素都包含t1
和t2
,这就是您可以访问Inserted
属性的方式。实际上不清楚您是否需要t1
或t2
的任何其他部分,因此您可以能够使用:
Group t2.Inserted By t1.id, t1.name Into Group
Select New With {
.id = id,
.name = name,
.count = Group.Count,
.min_value = Group.Min(),
.max_Value = Group.Max()
}
不幸的是,我的VB LINQ技能无法确定是否适合您。如果你对C#(你可以转换它)感到满意,我可以更轻松地帮助你......