当前位置: 首页 > 知识库问答 >
问题:

如何构建这个LINQ表达式?

黄鸣
2023-03-14

我有一个类似这样的类:

class UserProfile { public int Id; public int? ParentId; public string Name; public string Role; }
IEnumerable<UserProfile> users = new List<UserProfile>{
        new UserProfile(){Id = 1, ParentId = null,  Name = "Admin1", Role = "Admin" },
        new UserProfile(){Id = 2, ParentId = 1,  Name = "User2", Role = "Admin" },
        new UserProfile(){Id = 3, ParentId = 1,  Name = "User3", Role = "Admin" },
        new UserProfile(){Id = 3, ParentId = null,  Name = "Admin2", Role = "Admin" },
        new UserProfile(){Id = 4, ParentId = 3,  Name = "User4", Role = "Admin" },
        new UserProfile(){Id = 5, ParentId = null,  Name = "User5", Role = "Admin" },
        new UserProfile(){Id = 6, ParentId = 3,  Name = "User6", Role = "Admin" },
    };  
    null
var adminsOnly = users.Where(p => p.Role.Equals("Admin")).OrderBy(p => p.Id);
var usersOnly = users.Where(p => p.Role.Equals("User")).OrderBy(p => p.Id);

多谢.

注意:可以有没有管理员的用户,也可以有没有用户的管理员。

共有1个答案

秦信瑞
2023-03-14

试试这个:

users.Where(x => x.Role == "User" && x.ParentID == null)
     .Concat(users.Where(x => x.Role == "Admin")
                  .ToDictionary(x => x, 
                                x => users.Where(u => u.ParentId == x.Id));
                  .SelectMany(x => new[] {x.Key}.Concat(x.Value)));

这将为您提供一个IEnumerable ,所有用户都列在他们的admin之后,所有没有admin的用户都列在第一位。

 类似资料:
  • 所以,我想知道是否可以在C#中做下一件事: 我有一个DB模型--假设它是 : 和 中该类型的DbSet: 我还有一个 问题是--有可能用不同的IN对象动态构建linq WHERE表达式吗? null

  • 目前我学习Springboot。 在这个代码中 我知道这是lambda表达式,但我没有得到原始代码。这不是我的代码。你能让我知道原始代码吗?

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 问题内容: 在SQL中,我有: 我有一个WPF应用程序。 问题答案: 编辑:添加了一个子句

  • 问题内容: 这是一系列正则表达式教育文章的一部分,是对嵌套引用的概念的简要介绍。 前几个三角形数字是: 有很多方法可以检查数字是否为三角形。有一种使用正则表达式的有趣技术,如下所示: 给定 n ,我们首先创建一个长度为 n 的字符串,并填充相同的字符 然后,我们将此字符串与模式匹配 __当且仅当此模式与字符串匹配时, n 为三角形 以下是一些片段,表明它可以在多种语言中运行: PHP(在ideon

  • 问题内容: 编辑: 直到这里,我得到适当的4行,但它们都是相同的结果(我知道我需要4行,但是有不同的结果) 我的问题是,如何仅通过LotteryOfferId来通过多对多表检索所有彩票? 我要实现的是通过LotteryDrawDateId从彩票表中获取数据。 首先,我使用LotteryOfferId从中间表获取DrawDates,然后通过中间表获取drawDateIds以在LotteryDrawD