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循环中执行此操作,而不只是返回列表?