LINQ vb.net GROUP BY - SELECT JOINED列

时间:2011-10-18 12:38:28

标签: linq linq-to-entities

我有一个非常基本的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.这也是我问题的一个愚蠢的例子,而不是真正的现场架构。

我感谢你对此事的任何帮助

1 个答案:

答案 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)
}

请注意,每个组元素都包含t1t2,这就是您可以访问Inserted属性的方式。实际上不清楚您是否需要t1t2的任何其他部分,因此您可以能够使用:

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#(你可以转换它)感到满意,我可以更轻松地帮助你......