IEnumerable的解释

时间:2012-09-26 14:03:43

标签: c# asp.net asp.net-mvc-3

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();

    }

3 个答案:

答案 0 :(得分:2)

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

此代码说的是,如果指定了ToList,则在数据上添加一个过滤器,以便只包含userId与该变量匹配的项目。对userIdemail也是如此。

答案 1 :(得分:1)

这是Linq,(Where,Select等等)

=>这是lambda表达式

IEnumerable是.Net

中可迭代的每个事物的接口

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

答案 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的语法呈现