Down下面我参考了我正在看的代码。我不理解Code的IEnumerable部分。有人可以告诉我每行的含义。感谢
我不理解Where(u =>)比其余的更多。
public static List<AAlexUsers.Models.SearchClass> Users(string userId, string email, string lastFourdigits)
{
SearchClass Alex = new SearchClass();
Alex.userId = "1234";
Alex.email = "Alex@gmail.com";
Alex.lastFourdigits = "1885";
SearchClass Emilio = new SearchClass();
Emilio.userId = "0928";
Emilio.email = "Cubano@gmail.com";
Emilio.lastFourdigits = "0706";
SearchClass Ulysses = new SearchClass();
Ulysses.userId = "0914";
Ulysses.email = "lysses@gmail.com";
Ulysses.lastFourdigits = "01zx";
var list = new List<SearchClass>();
list.Add(Alex);
list.Add(Emilio);
list.Add(Ulysses);
IEnumerable<SearchClass> result = list;
if (!string.IsNullOrEmpty(userId))
result = result.Where(u => u.userId == userId);
if (!string.IsNullOrEmpty(email))
result = result.Where(u => u.email == email);
if (!string.IsNullOrEmpty(lastFourdigits))
result = result.Where(u => u.lastFourdigits == lastFourdigits);
return list.ToList();
}
答案 0 :(得分:2)
许多LINQ方法(包括Where
)都使用延迟执行。在这种情况下,您可以将IEnumerable视为查询,而不是实际的结果集。通过添加Where
语句,您实际上并没有做太多的事情,您只是在查询中添加一个额外的过滤器,以便稍后,当您实际评估序列时(在这种情况下,当{{}调用1}}这些过滤器都将被应用。
此代码说的是,如果指定了ToList
,则在数据上添加一个过滤器,以便只包含userId
与该变量匹配的项目。对userId
和email
也是如此。
答案 1 :(得分:1)
答案 2 :(得分:1)
IEnumerable是SearchClass对象的集合。将其视为列表或数组。
IEnumerable是一个描述可枚举内容的通用接口(您可以遍历它并查看/检索其所有元素)。此IEnumerable的内容可以预先生成,或者当您尝试迭代“结果”(IEnumerable)时生成/延迟生成。
接下来的行是针对此“结果”列表运行的查询:
result = result.Where(u => u.userId == userId);
可能会造成混淆,因为它会将查询的返回值分配给运行查询的数据。 我们来看一个更简单的例子:
var myResult= myEnumerableList.Where(u => u.userId == "Yusuf");
表示“var myResult”包含myEnumerableList中的所有元素,仅当此元素(此处称为“u”)具有等于“Yusuf”的属性userId时
.Net提供了查询集合/列表/ anything_enumerable的强大方法,以类似SQL的语法呈现