-3

在下面,我截取了我正在查看的代码的一部分。我不明白代码的 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();

    }
4

3 回答 3

2

许多 LINQ 方法,包括Where,都使用延迟执行。在这种情况下,您可以将 IEnumerable 视为查询,而不是实际的结果集。通过添加一条Where语句,您实际上并没有做任何事情,您只是在查询中添加了一个额外的过滤器,以便稍后,当您实际评估序列时(在这种情况下,当ToList被调用时)这些过滤器将全部被应用。

这段代码的意思是,如果userId已指定,则在数据上添加一个过滤器,以便仅userId包含与该变量匹配的项目。同样的事情也适用于emaillastFourdigits

于 2012-09-26T14:06:36.480 回答
1

这是Linq,(在哪里,选择等...)

=>这是 lambda 表达式

IEnumerable是.Net 中所有可迭代事物的接口

您可以google每个部分以获取详细信息

于 2012-09-26T14:12:13.633 回答
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 的语法呈现

于 2012-09-26T14:16:04.843 回答