返回包含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();
那不会有任何回报。
您的问题有点令人困惑。您说您想要获得一个用户列表,该列表必须包含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();
}