LINQ学习笔记

LINQ学习笔记(一)

1、LINQ简介

语言集成查询 (LINQ) 将数据库查询集成到代码中,支持SQL数据库、XML、ADO.NET、.NET以及支持 IEnumerable 或泛型 IEnumerable<T> 接口的任何对象集合数据源的数据访问,避免了以前使用数据库还需学习不同的数据库查询语言,如SQL、ADO.NET、XML等。LINQ查询表达式采用声明式查询语法编写,使用查询表达式时可以使用最少的代码实现数据源筛选、查询和排序操作。 实现跨数据源与数据格式的查询,可使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。

 例1:完整的数据源创建、查询表达式定义、查询表达式执行的完整过程。

class LINQQueryExpressions
{
    static void Main()
    {
       
        // Specify the data source.
        int[] scores = new int[] { 97, 92, 81, 60 };

        // Define the query expression.
        IEnumerable<int> scoreQuery =
            from score in scores
            where score > 80
            select score;

        // Execute the query.
        foreach (int i in scoreQuery)
        {
            Console.Write(i + " ");
        }           
    }
}

1、数据源

上例中,数据源是一个数组,因此它隐式支持泛型 IEnumerable<T> 接口。 这一事实意味着该数据源可以用 LINQ 进行查询。 查询在 foreach 语句中执行,且 foreach 需要 IEnumerableIEnumerable<T>。 支持 IEnumerable<T> 或派生接口(如泛型 IQueryable<T>)的类型称为可查询类型。

如果数据源还没有加载到内存中,则需要手动加载数据源,例如:

XML数据源

// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");

mdf数据源其中

Northwnd db = new Northwnd(@"c:\northwnd.mdf"); 

// Query for customers in London. 
IQueryable<Customer> custQuery = 
    from cust in db.Customers 
    where cust.City == "London" 
    select cust; 

2、查询

查询就是从数据源中检索信息,查询可以实现在数据返回之前对这些数据进行排序、分许和结构化。查询本身并不返回任何数据。

from指定数据源、Where子句指定筛选条件、select指定返回数据的类型

3、查询执行

  linq的数据查询过程延迟执行,查询变量本身只存储查询命令,等到访问查询结果集时,才执行实际的查询操作。

4、强制执行查询

  对于Max、Count、Average、First在执行时就会循环访问这些元素,所以不需要显示的执行Foreach语句

var evenNumQuery =
    from num in numbers
    where (num % 2) == 0
    select num;

int evenNumCount = evenNumQuery.Count();

要强制立即执行任何查询并缓存其结果,可调用 ToListToArray 方法

List<int> numQuery2 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();

// or like this:
// numQuery3 is still an int[]

var numQuery3 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToArray();

2、LINQ特点

1、查询表达式可用于查询并转换所有启用了 LINQ 的数据源中的数据。

2、查询表达式易于掌握,因为使用了许多熟悉的 C# 语言构造。

3、变量都是强类型,在Linq中无需声明变量类型。

4、只有在循环访问查询结果时,才会执行查询。

5、查询表达式可被编译成表达式树或委托,具体视应用查询的类型而定。

posted on 2017-08-10 18:06  1450811640  阅读(201)  评论(0编辑  收藏  举报