【问题标题】:How to query a list and return values where ID = any value in an array如何查询列表并返回 ID = 数组中的任何值的值
【发布时间】:2019-08-28 20:44:19
【问题描述】:

我有 2 个收藏。 1 是 groupIds 的数组,另一个是 IEnumerable。

我的用户类包含另一个 IList 类型的列表,表示用户所属的组:

 public class User
    {

        public  IList<Group> Groups { get; protected set; }
    }

Group 类看起来像这样:

public class Group{
      public long Group_Id { get; protected set; }
}

我需要做的是返回 groupIds 数组中所有用户的集合。即,我想要类似的东西:

usersRepository.Where(user => user.Groups.Where(group => groupIds.Contains(group.id))

如果我的 groupIds 数组的组 id 为 5 和 6,则返回 useresRepository 中属于组 5 和 6 的所有用户。

到目前为止,我能想到的最好的方法如下:

UserRepo.Users.AsEnumerable().Where(user =>
            user.GroupUsers.Where(wg => GroupIds.Contains(wg.Group_Id)));

但这是抱怨,因为 .Contains 返回一个布尔值而不是我的列表,但我不知道如何解决这个问题。

我的代码不起作用,因为 .Contains() 导致表达式返回布尔值而不是集合。但是,我不确定如何检查嵌套在我的 User 对象中的 GroupIds 列表是否包含指定的组 ID。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    试试Any。这将为您提供在 groupIds 数组中提到的任何组的所有用户

    UserRepo.Users.AsEnumerable().Where(user =>
                user.Groups.Any(wg => GroupIds.Contains(wg.Group_Id)));
    

    【讨论】:

      【解决方案2】:

      所以你有一个Users 序列,其中每个User 都有一个Groups 序列,其中每个Group 有一个GroupId

      你还有一个GroupIds序列。

      IEnumerable <int> groupIds = 
      IQueryable<User> users = ...
      

      您想要所有Users,至少有一个Group 和一个GroupId,在您的GroupIds 序列中。

      每当您看到“我想要所有至少有一个...的项目”时,请考虑使用Any

      var result = users
          .Where(user => user.groups
                             .Select(group => group.groupId)
                             .Any(groupId => groupIds.Contains(groupId));
      

      简而言之:从每个用户那里获取其群组集合。从每个组中获取 groupIds,并检查这些 groupIds 中的任何一个是否在集合 groupIds 中。如果是这样,请将此用户保留在您的结果中。

      这可以稍微短一点:

      var result = users.Where(user => user.groups.Any(group => groupIds.Contains(group.groupId));
      

      【讨论】:

        猜你喜欢
        • 2013-06-25
        • 2018-06-10
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 2021-07-23
        • 1970-01-01
        • 2012-03-12
        相关资源
        最近更新 更多