zoukankan      html  css  js  c++  java
  • C# 中的 LINQ 入门学习摘记

    1IEnumerable <T> 是一个接口,通过该接口,可以使用 foreach 语句来枚举泛型集合类。泛型集合类支持 IEnumerable<T>,就像非泛型集合类(如 ArrayList)支持 IEnumerable。

    2在 LINQ 查询中,最先使用 from 子句的目的是引入数据源 (customers) 和范围变量,范围变量类似于 foreach 循环中的迭代变量,但在查询表达式中,实际上不发生迭代。其他范围变量可由 let 子句引入。

    在下面的示例中,以两种方式使用了 let:

    1. 创建一个可以查询自身的可枚举类型。

    2. 使查询只能对范围变量 word 调用一次 ToLower。如果不使用 let,则必须在 where 子句的每个谓词中调用 ToLower。

    class LetSample1
    {
        static void Main()
        {
            string[] strings =
            {
                "A penny saved is a penny earned.",
                "The early bird catches the worm.",
                "The pen is mightier than the sword."
            };

            // Split the sentence into an array of words
            // and select those whose first letter is a vowel.
            var earlyBirdQuery =
                from sentence in strings
                let words = sentence.Split(' ')
                from word in words
                let w = word.ToLower()
                where w[0] == 'a' || w[0] == 'e'
                    || w[0] == 'i' || w[0] == 'o'
                    || w[0] == 'u'
                select word;

            // Execute the query.
            foreach (var v in earlyBirdQuery)
            {
                Console.WriteLine("\"{0}\" starts with a vowel", v);
            }

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    /* Output:
        "A" starts with a vowel
        "is" starts with a vowel
        "a" starts with a vowel
        "earned." starts with a vowel
        "early" starts with a vowel
        "is" starts with a vowel
    */

    对于非泛型数据源(如 ArrayList),必须显式类型化范围变量。

    下面的示例演示一个对 ArrayList 的简单查询。请注意,此示例在代码调用 Add 方法时使用对象初始值设定项,但这不是必需的。

    using System;
    using System.Collections;
    using System.Linq;

    namespace NonGenericLINQ
    {
        public class Student
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public int[] Scores { get; set; }
        }

        class Program
        {
            static void Main(string[] args)
            {
                ArrayList arrList = new ArrayList();
                arrList.Add(
                    new Student
                        {
                            FirstName = "Svetlana", LastName = "Omelchenko", Scores = new int[] { 98, 92, 81, 60 }
                        });
                arrList.Add(
                    new Student
                        {
                            FirstName = "Claire", LastName = "O’Donnell", Scores = new int[] { 75, 84, 91, 39 }
                        });
                arrList.Add(
                    new Student
                        {
                            FirstName = "Sven", LastName = "Mortensen", Scores = new int[] { 88, 94, 65, 91 }
                        });
                arrList.Add(
                    new Student
                        {
                            FirstName = "Cesar", LastName = "Garcia", Scores = new int[] { 97, 89, 85, 82 }
                        });

                var query = from Student student in arrList
                            where student.Scores[0] > 95
                            select student;

                foreach (Student s in query)
                    Console.WriteLine(s.LastName + ": " + s.Scores[0]);

                // Keep the console window open in debug mode.
                Console.WriteLine("Press any key to exit.");
                Console.ReadKey();
            }
        }
    }
    /* Output:
        Omelchenko: 98
        Garcia: 97
    */

    基本查询操作 (LINQ)

    1排序

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

    2分组

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

    3联接

    from order in Customer.Orders...

    4选择(投影)

    select 子句生成查询结果并指定每个返回的元素的“形状”或类型。例如,您可以指定结果包含的是整个 Customer 对象、仅一个成员、成员的子集,还是某个基于计算或新对象创建的完全不同的结果类型。当 select 子句生成除源元素副本以外的内容时,该操作称为“投影”。使用投影转换数据是 LINQ 查询表达式的一种强大功能。

  • 相关阅读:
    Android.mk高级写法
    Android Bitmap和Canvas学习笔记
    cocos2dx 3.x 开发环境搭建
    quick cocos2d-x 2.2.4 window环境调试
    Android应用开发相关下载资源(2014/12/14更新)
    quick-cocos2dx-2.2.4环境搭建
    U盘重装Windows系统
    Visual Studio 32位64位的问题和如何编译32位64位工程的问题
    使用UE4.16开发Oculus需要Oculus软件版本高于1.11
    UE4打包程序没有声音-需要安装UE4PrereqSetup_x64.exe
  • 原文地址:https://www.cnblogs.com/zhukezhuke/p/1534901.html
Copyright © 2011-2022 走看看