• Linq101-Grouping Operators


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 
      5 namespace Linq101
      6 {
      7     class Grouping
      8     {
      9         /// <summary>
     10         /// This sample uses group by to partition a list of numbers by their remainder when divided by 5.
     11         /// </summary>
     12         public void Linq40()
     13         {
     14             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
     15 
     16             var numberGroups = from n in numbers
     17                                group n by n % 5 into g
     18                                select new { Remainder = g.Key, Numbers = g };
     19 
     20             foreach (var numberGroup in numberGroups)
     21             {
     22                 Console.WriteLine("除以5余数为{0}的有:", numberGroup.Remainder);
     23                 foreach (var n in numberGroup.Numbers)
     24                 {
     25                     Console.WriteLine(n);
     26                 }
     27             }
     28         }
     29 
     30         /// <summary>
     31         /// This sample uses group by to partition a list of words by their first letter.
     32         /// </summary>
     33         public void Linq41()
     34         {
     35             string[] words = { "blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese" };
     36 
     37             var wordGroups = from w in words
     38                              group w by w[0] into g
     39                              select new { FirstLetter = g.Key, words = g };
     40 
     41             foreach (var wordGroup in wordGroups)
     42             {
     43                 Console.WriteLine("以字母{0}开头的单词有:", wordGroup.FirstLetter);
     44                 foreach (var word in wordGroup.words)
     45                 {
     46                     Console.WriteLine(word);
     47                 }
     48             }
     49         }
     50 
     51         /// <summary>
     52         /// This sample uses group by to partition a list of products by category.
     53         /// </summary>
     54         public void Linq42()
     55         {
     56             var products = Data.GetProductList();
     57 
     58             var productGroups = from p in products
     59                                 group p by p.Category into g
     60                                 select new { Category = g.Key, products = g };
     61 
     62             //ObjectDumper.Write(productGroups,1);
     63 
     64             foreach (var productGroup in productGroups)
     65             {
     66                 Console.WriteLine("分类为{0}的产品有:", productGroup.Category);
     67                 foreach (var product in productGroup.products)
     68                 {
     69                     ObjectDumper.Write(product);
     70                 }
     71             }
     72         }
     73 
     74         /// <summary>
     75         /// This sample uses group by to partition a list of each customer's orders, first by year, and then by month.
     76         /// </summary>
     77         public void Linq43()
     78         {
     79             var customers = Data.GetCustomerList();
     80 
     81             var customerOrderGroups = from c in customers
     82                                       select new
     83                                       {
     84                                           c.CompanyName,
     85                                           YearGroups = from o in c.Orders
     86                                                        group o by o.OrderDate.Year into yg
     87                                                        select new
     88                                                        {
     89                                                            Year = yg.Key,
     90                                                            MonthGoups = from o in yg
     91                                                                         group o by o.OrderDate.Month into mg
     92                                                                         select new { Month = mg.Key, mg }
     93                                                        }
     94                                       };
     95 
     96             ObjectDumper.Write(customerOrderGroups, 3);
     97         }
     98 
     99         /// <summary>
    100         /// This sample uses GroupBy to partition trimmed elements of an array using a custom comparer that matches words that are anagrams of each other.
    101         /// </summary>
    102         public void Linq44()
    103         {
    104             string[] anagrams = { "from   ", " salt", " earn ", "  last   ", " near ", " form  " };
    105 
    106             var query = anagrams.GroupBy(w => w.Trim(), new AnagramEqualityComparer());
    107 
    108             ObjectDumper.Write(query, 1);
    109         }
    110 
    111         private class AnagramEqualityComparer : IEqualityComparer<string>
    112         {
    113             public bool Equals(string x, string y)
    114             {
    115                 return getCanonicalString(x) == getCanonicalString(y);
    116             }
    117 
    118             public int GetHashCode(string obj)
    119             {
    120                 return getCanonicalString(obj).GetHashCode();
    121             }
    122 
    123             private string getCanonicalString(string word)
    124             {
    125                 char[] wordChars = word.ToCharArray();
    126                 Array.Sort(wordChars);
    127                 return new string(wordChars);
    128             }
    129         }
    130 
    131         /// <summary>
    132         /// This sample uses GroupBy to partition trimmed elements of an array using a custom comparer that matches words that are anagrams of each other, and then converts the results to uppercase.
    133         /// </summary>
    134         public void Linq45()
    135         {
    136             string[] anagrams = { "from   ", " salt", " earn ", "  last   ", " near ", " form  " };
    137 
    138             var query = anagrams.GroupBy(w => w.Trim(),
    139                 a => a.ToUpper(),
    140                 new AnagramEqualityComparer());
    141 
    142             ObjectDumper.Write(query, 1);
    143         }
    144     }
    145 }
  • 相关阅读:
    HtmlElement
    CSS3边框 阴影 boxshadow
    BOMwindow
    CSS3边框 圆角效果 borderradius
    Graphviz: 绘制依赖图、流程图、关系图 + dot 语言
    bat、cmd 批处理中(或 DOS环境)的特殊字符
    SchemaSpy:数据库构架文档生产器,以及该软件的部分缺陷修改。提供工具包下载
    (花生壳)向日葵 相关虚拟硬件(驱动)造成 xp 系统无法正常 待机、休眠
    Sqlserver:Sqlserver数据库的脚本生成器2.1
    PHP100精华:PHP打印函数集合
  • 原文地址:https://www.cnblogs.com/David-Huang/p/4196083.html
Copyright © 2020-2023  润新知