Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#_.net_Linq - Fatal编程技术网

C# Linq条件不工作时

C# Linq条件不工作时,c#,.net,linq,C#,.net,Linq,我正在尝试将所有姓氏过滤为“彼得” 但它不过滤,而是列出所有没有过滤的行 我做错了什么 if (pagedCollection != null) { do { List<IUser> usersList = pagedCollection.CurrentPage.ToList(); usersList.Where(x => !string.IsNullOrEmpty(x.Surname) && x.Surname

我正在尝试将所有姓氏过滤为“彼得”

但它不过滤,而是列出所有没有过滤的行

我做错了什么

if (pagedCollection != null)
{
    do
    {
        List<IUser> usersList = pagedCollection.CurrentPage.ToList();

        usersList.Where(x => !string.IsNullOrEmpty(x.Surname) && x.Surname.Contains("Peter")).FirstOrDefault();

        foreach (IUser user in usersList)
        {
            userList.Add((User) user);
        }
        pagedCollection = await pagedCollection.GetNextPageAsync();
    } 
    while (pagedCollection != null);
}
if(pagedCollection!=null)
{
做
{
List usersList=pagedCollection.CurrentPage.ToList();
usersList.Where(x=>!string.IsNullOrEmpty(x.name)和&x.name.Contains(“Peter”).FirstOrDefault();
foreach(用户列表中的IUser用户)
{
userList.Add((User)User);
}
pagedCollection=等待pagedCollection.GetNextPageAsync();
} 
while(pagedCollection!=null);
}
由于
FirstOrDefault
,此行返回一个名为
的用户,该用户包含
的“Peter”

usersList.Where(x => !string.IsNullOrEmpty(x.Surname) && x.Surname.Contains("Peter")).FirstOrDefault();
但是你不会把结果存储在任何地方。它不会“过滤”原始列表,如下所示:

usersList = usersList 
    .Where(x => !string.IsNullOrEmpty(x.Surname) && x.Surname.Contains("Peter"))
    .ToList();

实际上,这个查询也不会过滤原始列表,而是创建一个新列表,并最终将这个新列表重新分配给旧变量。因此,其效果类似于过滤。

其中返回当前第一个实例的IEnumable,然后将其丢弃

试试这个

if (pagedCollection != null)
{
    do
    {
        List<IUser> usersList = pagedCollection.CurrentPage.ToList();
        usersList = usersList.Where(x => !string.IsNullOrEmpty(x.Surname) && x.Surname.Contains("Peter"));
        pagedCollection = await pagedCollection.GetNextPageAsync();
    } 
    while (pagedCollection != null);
}
if(pagedCollection!=null)
{
做
{
List usersList=pagedCollection.CurrentPage.ToList();
usersList=usersList.Where(x=>!string.IsNullOrEmpty(x.姓氏)&&x.姓氏.Contains(“彼得”);
pagedCollection=等待pagedCollection.GetNextPageAsync();
} 
while(pagedCollection!=null);
}

在用户列表上使用where条件应用筛选后,您正在处理原始用户列表,而不是在筛选后处理结果列表。因此,它每次都包含所有用户

var filteredUserList = usersList.Where(x => !string.IsNullOrEmpty(x.Surname) 
                                             && x.Surname.Contains("Peter"));
这将显示筛选的用户


此外,FirstOrDefault将只筛选一个满足筛选条件的用户,您应该将其删除,并在启动foreach循环之前检查是否为null。

为什么这需要一段时间?这应该只是一个
If
语句请在发布答案之前阅读代码。回答问题不是盲目地解决一个问题,如果他们试图得到一个筛选出的彼得名单。1.你为什么要把它重新添加到原始用户列表中?2.为什么要在do-while循环中执行此操作,而不只是返回列表?