代码之家  ›  专栏  ›  技术社区  ›  Paul

linq to sql-选择最高版本号的列表

  •  0
  • Paul  · 技术社区  · 15 年前

    我正在尝试编写一些Linq to SQL,它将使我返回包含单个baseQuestionID实例的行列表,但我希望该行具有最高版本,因此,从下表的数据中:

    Id  CreatedDate                 Version    BaseQuestionID
     2  2009-10-07 13:47:27.687         1      2
     3  2009-10-07 13:49:35.010         1      3
     4  2009-10-09 16:03:45.973         1      5
     5  2009-10-16 16:01:33.603         2      5
     6  2009-10-16 16:16:22.680         1      6
     7  2009-10-16 16:16:53.807         2      6
     8  2009-10-16 16:41:31.180         3      6
     9  2009-10-19 08:06:23.210         4      6
    

    我想回来:

    Id  CreatedDate                 Version    BaseQuestionID
     2  2009-10-07 13:47:27.687         1      2
     3  2009-10-07 13:49:35.010         1      3
     5  2009-10-16 16:01:33.603         2      5
     9  2009-10-19 08:06:23.210         4      6
    

    我试过各种各样的东西,但还没有把它钉牢。我在vb.net上工作,但我很乐意尝试从C翻译,如果这是你所知道的…任何一个指针都将受到极大的赞赏。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

    (C):

    from q in dc.Questions
    group q by q.BaseQuestionID into grouped
    select grouped.OrderByDescending(q => q.Version).First()
    

    因此,基本上,您按问题ID组成一组行:

    Id  CreatedDate                 Version    BaseQuestionID
     2  2009-10-07 13:47:27.687             1          2
    
     3  2009-10-07 13:49:35.010             1          3
    
     4  2009-10-09 16:03:45.973             1          5
     5  2009-10-16 16:01:33.603             2          5
    
     6  2009-10-16 16:16:22.680             1          6
     7  2009-10-16 16:16:53.807             2          6
     8  2009-10-16 16:41:31.180             3          6
     9  2009-10-19 08:06:23.210             4          6
    

    (每个块是一个“分组行”),然后按版本降序排列每个组,只取第一行:

    Id  CreatedDate                 Version    BaseQuestionID
     2  2009-10-07 13:47:27.687             1          2
     3  2009-10-07 13:49:35.010             1          3
     5  2009-10-16 16:01:33.603             2          5
     9  2009-10-19 08:06:23.210             4          6
    

    我愿意 希望 这将得到对SQL的合理转换,但我不想肯定地说:)