C# Xamarin 代码到 Linq 语句

本文关键字:Linq 语句 代码 Xamarin | 更新日期: 2023-09-27 18:30:20

谁能帮我把这几行代码放到 linq 语句中?对linq语句不是很熟悉,如果有人能帮助我,将不胜感激。

var searchFor = constraint.ToString();
for (int i = 0; i < allUserList.Count; i++) {
    if (allUserList[i].FirstName.ToLower().Contains(searchFor) ||
        allUserList[i].LastName.ToLower().Contains(searchFor)) {
        userInfoList.Add(allUserList[i]);
    }
}

C# Xamarin 代码到 Linq 语句

您可以使用AddRange:

userInfoList.AddRange(allUserList.Where(a => 
                      a.FirstName.ToLower().Contains(searchfor) ||        
                      a.LastName.ToLower().Contains(searchfor));

Where将返回一个IEnumerable<UserObject>,AddRange 可以使用该填充用户信息列表

首先,我建议您将condition statement移到单独的方法中,因为当您使用 Linq 时,这将使代码更具可读性:

private bool UserNameContains(<your user name> user, string searchFor)
{
   return user.FirstName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1 ||
          user.LastName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1;
}

请注意,我正在使用 IndexOf(...) != -1 。这是因为Contains内部使用相同的方法,但参数StringComparision.Ordinal。假设您不关心大小写,最好使用 IndexOf(..., StringComparision.OrdinalIgnoreCase) ,这样您将避免降低字符串字符并防止在包含大写字符的情况下引入错误searchFor

那么你需要做的就是:

userInfoList.AddRange( allUserList.Where(user => this.UserNameContains(user, searchFor) );

或者,如果userInfoList是新的空列表,则可以将整个逻辑移动到其变量声明中:

var userInfoList = allUserList.Where(user => this.UserNameContains(user, searchFor).ToList();

请注意,应添加 using System.Linq; using 指令,以便能够使用 Linq 扩展。

这是从内存中得出的 - 不能保证确切的语法:

userInfoList = (from x in allUserList 
  where x.FirstName.ToLower().Contains(searchFor) || 
  x.LastName.ToLower().Contains(searchFor) select x).ToList();