Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq签入列表和筛选集合_C#_Linq - Fatal编程技术网

C# 使用Linq签入列表和筛选集合

C# 使用Linq签入列表和筛选集合,c#,linq,C#,Linq,我正在使用linq从用户集合中删除用户,如下所示。做这件事有更好的方法吗?我可以合并第一个和第二个查询吗 List<int> userIDs = ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userid)).ToList(); foreach (int userId in userIDs) { userInfoList.R

我正在使用linq从用户集合中删除用户,如下所示。做这件事有更好的方法吗?我可以合并第一个和第二个查询吗

List<int> userIDs = ConfigurationManager.AppSettings["users"].Split(',').Select(userId =>            Convert.ToInt32(userid)).ToList();

foreach (int userId in userIDs)
{
   userInfoList.RemoveAll(user => (user.UserId.Equals(userId)));
}
List userId=ConfigurationManager.AppSettings[“users”].Split(“,”).Select(userId=>Convert.ToInt32(userId)).ToList();
foreach(userId中的int userId)
{
userInfoList.RemoveAll(user=>(user.UserId.Equals(UserId));
}
UserInfoList
是用户的集合


提前感谢

这样会更有效率:

HashSet<int> userIDs = new HashSet<int>(ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userId)));

userInfoList.RemoveAll(user => userIDs.Contains(user.UserId));
HashSet userId=newhashset(ConfigurationManager.AppSettings[“users”].Split(“,”).Select(userId=>Convert.ToInt32(userId));
userInfoList.RemoveAll(user=>userIDs.Contains(user.UserId));

如果userid中有n个元素,userInfoList中有m个元素,那么您的解决方案是O(n*m)。使用HashSet,复杂性变得O(n+m)-好得多。(假设哈希表操作是常数时间)。

用户信息列表中是否已经填充了项目,并且您希望对其进行过滤,或者这只是初始化它的一个步骤?您可以通过一个查询一次创建所有列表。userInfoList将被填充。我使用了Petar Ivanov解决方案,因为我需要一些其他情况下的原始列表。实际上,您可以使用
contains
,因为
user.UserId
的类型是
int
(因为
UserId
的类型是
HashSet