C# 如何筛选列表?
这是一种将已分配的用户从列表中删除的方法 并将未分配的保留在列表中。GuidList添加了userId 只需点击一个按钮就可以打开它。profileList用于填充gridView 代码如下:C# 如何筛选列表?,c#,sorting,loops,generic-list,C#,Sorting,Loops,Generic List,这是一种将已分配的用户从列表中删除的方法 并将未分配的保留在列表中。GuidList添加了userId 只需点击一个按钮就可以打开它。profileList用于填充gridView 代码如下: private VList<VW_profiles> FilterAssigned(VList<VW_profiles> profileList) { VList<VW_profiles> sortedList = new VList<VW_profile
private VList<VW_profiles> FilterAssigned(VList<VW_profiles> profileList)
{
VList<VW_profiles> sortedList = new VList<VW_profiles>();
foreach(VW_profiles profile in profileList)
{
if(GuidList.Count > 0)
{
foreach(Guid userId in GuidList)
{
if(profile.UserId != userId)
{
sortedList.Add(profile)
}
}
}
else
{
sortedList = profileList;
}
}
return sortedList;
}
private VList filterasigned(VList profileList)
{
VList sortedList=新VList();
foreach(配置文件列表中的VW_配置文件)
{
如果(GuidList.Count>0)
{
foreach(GuidList中的Guid userId)
{
if(profile.UserId!=UserId)
{
sortedList.Add(配置文件)
}
}
}
其他的
{
sortedList=档案列表;
}
}
返回分类列表;
}
现在我的问题来了。到目前为止,一切似乎都很顺利
配置文件列表中的所有项目也已删除
添加到GuidList。然后就不用做否定了
这两个Guid ID,我们开始再次添加所有人。有人对如何做到这一点有什么建议吗?这是一种更有效的方法,并且在我们将所有内容都删除后避免添加内容
谢谢 如果VList
是列表
,则可以执行以下操作:
profileList.RemoveAll(profile => GuidList.Contains(profile.UserId));
var filtered = new VList<VW_profiles>(
profileList.Where(profile => !GuidList.Contains(profile.UserId)));
如果性能是一个问题,并且有很多guid需要删除,那么您可以将GuidList设置为一个HashSet
根据评论编辑:如果不想修改原始列表,请执行以下操作:
profileList.RemoveAll(profile => GuidList.Contains(profile.UserId));
var filtered = new VList<VW_profiles>(
profileList.Where(profile => !GuidList.Contains(profile.UserId)));
您的问题在以下代码中:
foreach(Guid userId in GuidList)
{
if(profile.UserId != userId)
{
sortedList.Add(profile)
}
}
它应该更像:
bool inList = false;
foreach(Guid userId in GuidList)
{
if(profile.UserId == userId)
{
inList = true;
}
}
if (!inList)
sortedList.Add(profile)
GuidList.Where(x => x != profile.UserId)
.Foreach(x => sortedList.Add(x));
或者,更具LINQ风格:
bool inList = GuidList.Any(x => x == profile.UserId);
if (!inList)
sortedList.Add(profile)
您当前的代码更像:
bool inList = false;
foreach(Guid userId in GuidList)
{
if(profile.UserId == userId)
{
inList = true;
}
}
if (!inList)
sortedList.Add(profile)
GuidList.Where(x => x != profile.UserId)
.Foreach(x => sortedList.Add(x));
我想这不是你想要的:)但是排序到底在哪里处理呢?为什么不用lambda表达式来处理呢,代码会少得多,fasterI会写一个lambda,但我不明白你的代码应该做什么我想我应该说我在使用.net 2.0.+1,但请注意,这将修改原始列表。我不确定这是不是有意的,就是这样!我错过了那里的布尔开关。我喜欢使用lambda或LINQ的想法,但我使用的是2.0框架,无法访问这些功能。