C#Xamarin代码Linq的说明
任何人都可以帮我将这几行代码转换为linq语句吗?不太熟悉linq语句,如果有人能帮助我,我将不胜感激。C#Xamarin代码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]);
}
}
可以使用的AddRange:
userInfoList.AddRange(allUserList.Where(a =>
a.FirstName.ToLower().Contains(searchfor) ||
a.LastName.ToLower().Contains(searchfor));
Where
将返回一个IEnumerable<UserObject>
它的AddRange可以用它来填充userInfoList
这是从记忆 - 关于确切的语法没有保证:
userInfoList = (from x in allUserList
where x.FirstName.ToLower().Contains(searchFor) ||
x.LastName.ToLower().Contains(searchFor) select x).ToList();
不要忘记,他想添加项目到列表中,而不是替换查询的结果。 – Robert 2014-11-14 14:46:53
首先,我会建议你移动o UT斯达康的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;
使用指令为了能够使用Linq扩展。
ToLower是一个函数,所以你需要大括号 – WebFreak001 2014-11-14 14:47:17
@ WebFreak001正确 – Jonesopolis 2014-11-14 14:47:39