Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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# 如何筛选列表?_C#_Sorting_Loops_Generic List - Fatal编程技术网

C# 如何筛选列表?

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

这是一种将已分配的用户从列表中删除的方法 并将未分配的保留在列表中。GuidList添加了userId 只需点击一个按钮就可以打开它。profileList用于填充gridView

代码如下:

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框架,无法访问这些功能。