zoukankan      html  css  js  c++  java
  • C#2008与.NET 3.5 高级程序设计读书笔记(14) LINQ

    1.LINQ简介

    LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。

    LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源.

    LINQ是一系列相关的技术,试图提供一个单一的,对称的方式来与各种形式的数据交互.

    语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。在 Visual Studio 中,可以用 Visual Basic 或 C# 为以下数据源编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集,以及支持 IEnumerable 或泛型 IEnumerable<T> 接口的任意对象集合。如下图:

    2.核心LINQ程序集

    3.LINQ查询简介:

    可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ 提供程序可用的任何其他格式的数据。

    所有 LINQ 查询操作都由以下三个不同的操作组成:

    (1)获取数据源(LINQ 数据源是支持泛型 IEnumerable<T> 接口或从该接口继承的接口的任意对象).

    (2)创建查询。

    (3)执行查询。 

    代码
    class IntroToLINQ
    {
    static void Main()
    {
    // The Three Parts of a LINQ Query:
    // 1. Data source.
    int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

    // 2. Query creation.
    // numQuery is an IEnumerable<int>
    var numQuery =
    from num
    in numbers
    where (num % 2) == 0
    select num;

    // 3. Query execution.
    foreach (int num in numQuery)
    {
    Console.Write(
    "{0,1} ", num);
    }
    }
    }

    4.LINQ 和泛型类型 (C#)

    (1)LINQ 查询中的 IEnumerable<T> 变量

    LINQ 查询变量类型化为 IEnumerable<T> 或派生类型,如 IQueryable<T>当您看到类型化为 IEnumerable<Customer> 的查询变量时,这只意味着在执行该查询时,该查询将生成包含零个或多个 Customer 对象的序列。 如果您愿意,可以使用 var 关键字来避免使用泛型语法。var 关键字指示编译器通过查看在 from 子句中指定的数据源来推断查询变量的类型。下面的示例生成与上一个示例相同的编译代码:

    代码
    IEnumerable<Customer> customerQuery =
    from cust
    in customers
    where cust.City == "London"
    select cust;

    foreach (Customer customer in customerQuery)
    {
    Console.WriteLine(customer.LastName
    + ", " + customer.FirstName);
    }

    (2)让编译器处理泛型类型声明

    代码
    var customerQuery2 =
    from cust
    in customers
    where cust.City == "London"
    select cust;

    foreach(var customer in customerQuery2)
    {
    Console.WriteLine(customer.LastName
    + ", " + customer.FirstName);
    }

     5.基本 LINQ 查询操作 (C#)

     (1).获取数据源

    //queryAllCustomers is an IEnumerable<Customer>
    //数据源 (customers)
    //范围变量 (cust)
    var queryAllCustomers = from cust in customers
    select cust;

    (2)筛选

    var queryLondonCustomers = from cust in customers
    where cust.City == "London"
    select cust;

    (3)排序

    var queryLondonCustomers3 =
    from cust
    in customers
    where cust.City == "London"
    orderby cust.Name ascending
    select cust;

    (4)分组

    代码
    // queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
    var queryCustomersByCity =
    from cust
    in customers
    group cust by cust.City;

    // customerGroup is an IGrouping<string, Customer>
    foreach (var customerGroup in queryCustomersByCity)
    {
    Console.WriteLine(customerGroup.Key);
    foreach (Customer customer in customerGroup)
    {
    Console.WriteLine(
    " {0}", customer.Name);
    }
    }

    (5)联接

    //因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。例如
    //Customer 对象包含 Order 对象的集合。不必执行联接,只需使用点表
    //示法访问订单
    from order in Customer.Orders...
  • 相关阅读:
    SASS常用方法
    Vue 全局过滤和局部过滤
    Java进阶知识点8:高可扩展架构的利器
    InnoDB MVCC RR隔离级别下的数据可见性总结
    记一次诡异的网络故障排除
    数据库的读锁和写锁在业务上的应用场景总结
    Gradle配置IDEA正常识别JPA Metamodel Generator动态生成的代码
    程序员容易读错的单词
    Java进阶知识点7:不要只会写synchronized
    Java进阶知识点6:并发容器背后的设计理念
  • 原文地址:https://www.cnblogs.com/engine1984/p/1787746.html
Copyright © 2011-2022 走看看