• 【C#】解析C#中LING的使用


    LING提供了一种从数据源中获取数据的方式,不同的语言已经形成了很多种关联的数据源。LING(Language Integrated Query,语言集成查询)提供一种通用的从不同的数据源中获取数据的通用方式。

    LING操作的三个基本要素

    所有的LING语句都由三部分组成,它们分别是获取数据源、创建查询语句、执行查询语句。

    下面是一个简单的案例:

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

    下面的图验证了完整的执行操作,在LING的查询和平常的查询概念不同。LING中创建查询变量是不会获取任何实际的数据,这一点在后面会详细介绍。

    获取数据源

    LING语句的数据源必须是 IEnumerable或IEnumerable<E>接口的实现类,上面的int[]数组隐式实现了IEnumerable<E>接口,所以可以使用LING语句。
    除了可以LING指定已经加载内存中的数据源,也可以为LING指定还未加载到内存中的数据源,下面使用LING to XML加载一个XML文档到内存中:

    // Create a data source from an XML document.
    // using System.Xml.Linq;
    XElement contacts = XElement.Load(@"c:myContactList.xml");

    或者使用LING to db 加载一个数据库文件到内存中:

    Northwnd db = new Northwnd(@"c:
    orthwnd.mdf");
    
    // Query for customers in London.
    IQueryable<Customer> custQuery =
        from cust in db.Customers
        where cust.City == "London"
        select cust;

    创建查询语句

    查询语句指定了从数据源获取数据源的方式,一般情况下也应该指定数据的排序方式,分组方式或是结构化处理。

    上面的查询操作是从一个Int数据中返回数据,其查询语句一共使用了三个从句:from,where,select。from从句指定查询的数据源,where从句使用过滤语句,select从句指定返回语句。

    注意:查询变量本身不产生任何实际的查询操作也不会返回任何数据,它仅仅是存储查询的语句。可以通过在代码调试来验证这一点。

    执行查询操作

    延迟执行

    在上面的案例中,查询变量仅仅是存储查询的命令,实际的查询操作是对这个查询变量进行迭代操作。这就是LING的延迟执行。上面的案例中,实际的查询操作是:

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

    这里foreach就是获取查询结果的地方,其中num就代表从查询结果中获取到值。

    因为查询变量不会存储任何任何查询结果,所以可以多次执行这个查询变量。比如,有一个数据库可能被不同的应用连续进行更新操作。或者,在一个应用程序中先创建查询语句然后晚些再执行它。或者,可以在间隔时间内执行相同的查询语句获得不同的查询结果。

    立即执行

    LING对查询提供了聚集函数的功能,使用这些功能时首先必须循环访问这些元素。这些聚集函数有:Count,Max,Average和First。因为查询本身使用foreach返回查询结果,因此这些函数都不需要显式foreach语句。使用这些函数查询返回的是单个值,不是一个IEnumerable集合。

    var evenNumQuery =
        from num in numbers
        where (num % 2) == 0
        select num;
    
    int evenNumCount = evenNumQuery.Count();

    若要强制执行并返回缓存查询的结果,可以调用ToList和ToArray方法。

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

    原文链接:

    LING查询简介

    C#LING入门

  • 相关阅读:
    Android简易注解View(java反射实现)
    android注解[Jake Wharton Butter Knife]
    Android渠道汇总
    SVN管理规范
    马上着手开发iOS应用程序一 todolist
    MVC记录
    OC中intValue要注意的地方
    将从数组中取到的字符串赋值给了UIImage导致的错误
    一个null引发的错误
    记录一些容易忘记的属性 -- UITabBarController
  • 原文地址:https://www.cnblogs.com/HDK2016/p/9775827.html
Copyright © 2020-2023  润新知