我试图将所有姓氏过滤为"彼得"
但它没有过滤而是列出了没有过滤器的所有行
我在做什么错?
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);
}
答案 0 :(得分:4)
由于SurName
,此行返回"Peter"
包含FirstOrDefault
的单个用户:
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();
实际上这个查询也不会过滤原始列表,而是创建一个新的,最后将这个新列表重新分配给旧变量。所以效果类似于过滤。
答案 1 :(得分:2)
其中返回一个IEnumeable,你当前占用了第一个实例,然后扔掉它。
试试这个
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);
}
答案 2 :(得分:1)
使用用户列表中的where条件应用过滤后,您正在处理原始用户列表,而不是在过滤后处理结果列表。因此,它每次都包含所有用户。
var filteredUserList = usersList.Where(x => !string.IsNullOrEmpty(x.Surname)
&& x.Surname.Contains("Peter"));
这应显示已过滤的用户。
此外,FirstOrDefault将仅过滤一个满足过滤条件的用户,您应该将其删除,并在启动foreach循环之前检查空值。