返回包含int列表中所有Id的列表

本文关键字:列表 Id 包含 int 返回 | 更新日期: 2023-09-27 18:00:58

我有一个id列表:

var IdList = new int[]{1, 2};

我还有一个用户列表:

var userList = new List<User>()
        {
            new User() {Id = 1, Name = "User1" },
            new User() {Id = 1, Name = "User2" },
            new User() {Id = 2, Name = "User2" },
            new User() {Id = 1, Name = "User3" },
            new User() {Id = 1, Name = "User4" },
            new User() {Id = 2, Name = "User4" }
        };

我想获得一个用户列表,该列表必须包含IdList中的所有Id。因此,在本例中,我希望返回User2和User4。我见过其他子集的例子,它们只是使用Except和return boolean,即使在适应我的需求时也不会产生正确的结果。我还看到一个标记为重复的问题(类似问题(,它正试图做到这一点,但不同意这是重复的,而且从未得到真正的回答。我尝试过:

userList.Where(u => IdList.All(i => i == u.Id)).ToList();

那不会有任何回报。

返回包含int列表中所有Id的列表

您的问题有点令人困惑。您说您想要获得一个用户列表,该列表必须包含IdList中的所有Id,并且您的预期输出是User2和User4。这没有道理,因为你的IdList有1和2。

此外,您有多个Id为1的记录。User1、User2和User3具有相同的Id。从中获取一条记录的模式是什么?

假设您没有重复的数据,并且您想要基于项int eh idList的项子集,则可以使用LINQ Contains方法。

var IdList = new int[]{1, 2};
var userList = new List<User>()
        {
            new User() {Id = 1, Name = "User1" },
            new User() {Id = 2, Name = "User2" },
            new User() {Id = 3, Name = "User3" },
            new User() {Id = 4, Name = "User4" }
        };
var subSet = userList.Where(d=>IdList.Contains(d.Id);
//subSet  will have records for  User1 and User2 

使用Bellow 1Line linq代码。

var q = userList.GroupBy(c => c.Name).Where(c => IdList.All(ccc => userList.Where(cc => cc.Name == c.Key).Any(cc => cc.Id == ccc))).ToList();

并且该代码返回User2和User4

好吧,这并不优雅,但有效:

List<string> result = new List<string>();
result = userList.Where(x => x.Id == IdList[0]).
          Select(x => x.Name).ToList();
for(int i =1; i<IdList.Count();i++)
{
    result = userList.Where(x => x.Id == IdList[i]).
          Select(x => x.Name).ToList().
          Intersect(result).ToList();
}