• Linq学习笔记(二)Linq To Objects 基础


    在上篇文章中我们初步接触了Linq查询表达式的语法,在这一篇文章中将会详细说明Linq查询中的各个关键字。

    必备知识

    C#3.0新特性

    本次使用的基础数据还是跟上一篇中一样,详细看下BaseData中的数据(代码2.1):

    1. public class BaseData
    2.     {
    3.        
    4.         public static Projects[] ProjectList =
    5.         {
    6.             new Projects{ProjectsID="CAMS_NT",ProjectsName="信息系统-NT",CreateDate=new DateTime(2008,1,3)},
    7.             new Projects{ProjectsID="CAMS_WX",ProjectsName="信息系统-WX",CreateDate=new DateTime(2008,5,3)},
    8.             new Projects{ProjectsID="WMS",ProjectsName="仓储系统",CreateDate = new DateTime(2009,5,3)}
    9.         };
    10.  
    11.         private static Modules EmployeeManager = new Modules
    12.         {
    13.             Project = ProjectList[0],
    14.             ModuleID = "EmployeeManager",
    15.             ModuleName = "员工管理",
    16.             IsHaveChild = true,
    17.             CreateDate = DateTime.Now
    18.         };
    19.  
    20.  
    21.         public static Modules[] ModuleList =
    22.         {
    23.             EmployeeManager,
    24.             new Modules{
    25.                 Project  = ProjectList[0],
    26.                 ParentModule = EmployeeManager,
    27.                 ModuleID="EmployeeBasicInfo",ModuleName="员工基础信息管理",IsHaveChild=true,CreateDate=DateTime.Now
    28.             }
    29.         };
    30.  
    31.         public static Functions[] FunctionList =
    32.         {
    33.             new Functions{
    34.                 Module = ModuleList[1],
    35.                 FuncID="AddUser",FuncName="新增员工"
    36.             },
    37.             new Functions{
    38.                 Module = ModuleList[1],
    39.                 FuncID="ModifyUser",FuncName="修改员工"
    40.             }
    41.         };
    42.     }

    常用的操作符

    1.Where

    Where操作符的作用就是通过某些条件的判断对序列中的元素进行过滤。Where的扩展方法申明如下(代码2.2):

    1. public static IEnumerable<T> Where<T>(
    2.     this IEnumerable<T> source,
    3.     Func<T, bool> predicate
    4.     );

    我们可以看到where是定义在IEnumerable类型上的扩展方法,where的参数为一个Func<T,bool>类型的委托,也就是说为一个返回值为bool类型参数为T类型的方法(可以通过这篇文章来了解扩展方法和这篇文章来理解委托)。

    示例(代码2.3):

    1. var projectnames = BaseDate.BaseData.ProjectList.Where(project => project.ProjectsID.StartsWith("CAMS"))
    2.     .Select(project => project.ProjectsName);

    在查询表达式中(代码2.4):

    1. var projectnames = from project in BaseData.ProjectList
    2.                                where project.ProjectsID.StartsWith("CAMS")
    3.                                select project.ProjectsName;

    另外Where操作符还有一个重载(代码2.5):

    1. public static IEnumerable<T> Where<T>(
    2.     this IEnumerable<T> source,
    3.     Func<T,int, bool> predicate
    4.     );

    这里面就是多了一个int类型参数,它是表示元素在序列中的位置,元素是从0开始的,在上面的查询中我们查到的结果是:

    image

    我们使用重载的方法(代码2.6):

    1. var projectnames = BaseDate.BaseData.ProjectList
    2.     .Where((project, index) => project.ProjectsID.StartsWith("CAMS") && index==1)
    3.     .Select(project => project.ProjectsName);

    我们可以看到结果是:

    image

    2.Select

    Select操作的主要作用就是进行投影。Select的申明如下(代码2.7):

    1. public static IEnumerable<S> Select<T, S>(
    2.         this IEnumerable<T> source,
    3.         Func<T, S> selector
    4.     );

    在申明中我们可以理解到返回S类型的IEnumerable,在大部分投影操作我们会用到匿名类型(通过这篇文章可以了解匿名类型)其实我们在上面的几段代码中已经使用过了where操作,这里就不再举例了。

    跟Where一样Select操作也提供了查询索引的功能,我们来看一个例子(代码2.8):

    1. var projectnames = BaseDate.BaseData.ProjectList
    2.     .Where((project) => project.ProjectsID.StartsWith("CAMS"))
    3.     .Select((project, index) => new { project.ProjectsName,index });
    4. foreach (var proname in projectnames)
    5. {
    6.     Console.WriteLine(proname.index+" "+proname.ProjectsName);
    7. }

    结果:

    image

    3.Orderby

    orderby可以指定多种排序方式。我们来看下示例(代码2.9):

    1. var projects = BaseData.ProjectList.OrderBy(project => project.CreateDate)
    2.     .ThenByDescending(project => project.ProjectsName);
    3. foreach (var project in projects)
    4. {
    5.     Console.WriteLine(project.ProjectsID + " " + project.ProjectsName + " " + project.CreateDate);
    6. }

    我们也可以用表达式的方式来写(代码2.10):

    1. var projects = from project in BaseData.ProjectList
    2.                orderby project.CreateDate, project.ProjectsName descending
    3.                select project;
    4. foreach (var project in projects)
    5. {
    6.     Console.WriteLine(project.ProjectsID + " " + project.ProjectsName + " " + project.CreateDate);
    7. }

    总结

    本文中,主要对Select、Where、OrderBy这三个常用的操作符进行了详细的说明,本章主要说的基础,在下篇文章中将会详细说明其他的一些查询操作如:嵌套查询、连接查询、分组等。

  • 相关阅读:
    MATLAB实现的车牌定位系统
    机器学习公开课备忘录(一)回归问题
    localStorage cookie的增删改查
    cookies,sessionStorage和localStorage的区别(浏览器缓存的区别)
    提升页面性能的方法
    get和post的区别
    ajax jsonp axios fetch
    vue项目创建
    (转)如何使用Log4net创建日志及简单扩展
    C# TSC打印二维码和条形码
  • 原文地址:https://www.cnblogs.com/Henllyee/p/1603355.html
Copyright © 2020-2023  润新知