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

linq:在groupby和selectmany中添加额外条件

  •  0
  • kaka1234  · 技术社区  · 8 年前

    从上一篇文章继续: SQL Query: Display only latest Id from each set

    我有以下SQL表:

    Name       Description   Id   UserId   CreatedDate
    
    UserSet1   Desc1         0    Abc      06/01/2018
    UserSet1   Desc2         1    Abc      06/01/2018
    UserSet1   Desc4         2    Def      06/02/2018
    UserSet2   Desc for 2    5    NewUser  06/04/2018
    UserSet2   Desc for 2    7    NewUser  06/19/2018
    

    我要从上表中提取的只是每个名称的最新ID,以便可以获得以下输出

    Name      Description    Id    UserId    CreatedDate
    
    UserSet1  Desc1          0     Def       06/01/2018
    UserSet1  Desc2          2     Def       06/01/2018
    UserSet2  Desc for 2     7     NewUser   06/19/2018
    

    因为id 2&7是userset1&userset2表中的最新条目,所以我想显示它而不是表中的所有条目。下面的linq代码解决了这个问题。现在我有另一个要求,也要显示id为零的所有行(见上面的预期结果)。

    var results = response
      .GroupBy(row => row.Name)
      .SelectMany(g => g
         .OrderByDescending(row => row.Id)
         .Take(1));
    

    如何修改上面的linq,使其显示名称的所有最高的no id和任何id(也为零)。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   A.sharif    8 年前
      var results = response.GroupBy(row => row.Name)
                            .SelectMany(g => g
                            .OrderByDescending(row => row.Id)
                            .Take(1))
                          .Union(response.Where(x=>x.Id== 0));