【问题标题】:LINQ vb.net GROUP BY - SELECT JOINED columnLINQ vb.net GROUP BY - SELECT JOINED 列
【发布时间】:2011-10-18 20:50:59
【问题描述】:

我正在尝试重现一个非常基本的 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.id 上的 tbl1。这也是我的问题的一个简化示例,而不是真正的实时模式。

感谢您对此事的任何帮助

【问题讨论】:

    标签: linq linq-to-entities


    【解决方案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# 中的它(然后可以转换)感到满意,我可以更轻松地为您提供帮助...

    【讨论】:

    • 当然,我总是可以移植 C#。我将在今天晚些时候尝试,因为我要结束一个 12 小时的工作之夜。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2011-09-15
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多