• 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 查询表达式的一种强大功能。

  • 相关阅读:
    网络传输介质和布线
    计算机网络参考模型
    c语言中利用函数库获取当前时间,写入文件中。
    明解c语言 13-4
    c语言中fprintf函数,向文件中写入数据
    c语言 13
    c语言中统计文件字符数
    c语言中使用fscanf函数从文件读取数据(逐行读取并保存变量)
    繁华模拟赛 ljw搭积木
    繁华模拟赛 找十字架
  • 原文地址:https://www.cnblogs.com/zhukezhuke/p/1534901.html
Copyright © 2020-2023  润新知