1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4
5 namespace Linq101
6 {
7 class Set
8 {
9 /// <summary>
10 /// This sample uses Distinct to remove duplicate elements in a sequence of factors of 300.
11 /// </summary>
12 public void Linq46()
13 {
14 int[] factorsOf300 = { 2, 2, 3, 5, 5 };
15
16 var uniqueFactors = factorsOf300.Distinct();
17
18 Console.WriteLine("300的因数:");
19 foreach (var factor in uniqueFactors)
20 {
21 Console.WriteLine(factor);
22 }
23 }
24
25 /// <summary>
26 /// This sample uses Distinct to find the unique Category names.
27 /// </summary>
28 public void Linq47()
29 {
30 List<Data.Product> products = Data.GetProductList();
31
32 var categoryNames = (from p in products
33 select p.Category).Distinct();
34
35 Console.WriteLine("种类名称:");
36 ObjectDumper.Write(categoryNames);
37 }
38
39 /// <summary>
40 /// This sample uses Union to create one sequence that contains the unique values from both arrays.
41 /// </summary>
42 public void Linq48()
43 {
44 int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
45 int[] numbersB = { 1, 3, 5, 7, 8 };
46
47 var uniqueNumbers = numbersA.Union(numbersB);
48
49 Console.WriteLine("Unique numbers from both arrays:");
50 ObjectDumper.Write(uniqueNumbers);
51 }
52
53 /// <summary>
54 /// This sample uses Union to create one sequence that contains the unique first letter from both product and customer names.
55 /// </summary>
56 public void Linq49()
57 {
58 List<Data.Product> products = Data.GetProductList();
59 List<Data.Customer> customers = Data.GetCustomerList();
60
61 var productFirstChar = from p in products select p.ProductName[0];
62 var customerFirstChar = from c in customers select c.CompanyName[0];
63
64 var uniqueFirstChar = productFirstChar.Union(customerFirstChar);
65
66 Console.WriteLine("Unique First Char:");
67 ObjectDumper.Write(uniqueFirstChar);
68 }
69
70 /// <summary>
71 /// This sample uses Intersect to create one sequence that contains the common values shared by both arrays.
72 /// </summary>
73 public void Linq50()
74 {
75 int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
76 int[] numbersB = { 1, 3, 5, 7, 8 };
77
78 var commonNumbers = numbersA.Intersect(numbersB);
79
80 Console.WriteLine("共有的数字:");
81 ObjectDumper.Write(commonNumbers);
82 }
83
84 /// <summary>
85 /// This sample uses Intersect to create one sequence that contains the common first letter from both product and customer names.
86 /// </summary>
87 public void Linq51()
88 {
89 List<Data.Product> products = Data.GetProductList();
90 List<Data.Customer> customers = Data.GetCustomerList();
91
92 var productFirstChar = from p in products select p.ProductName[0];
93 var customerFirstChar = from c in customers select c.CompanyName[0];
94
95 var commonFirstChar = productFirstChar.Intersect(customerFirstChar);
96
97 Console.WriteLine("Common First Char");
98 ObjectDumper.Write(commonFirstChar);
99 }
100
101 /// <summary>
102 /// This sample uses Except to create a sequence that contains the values from numbersAthat are not also in numbersB.
103 /// </summary>
104 public void Linq52()
105 {
106 int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
107 int[] numbersB = { 1, 3, 5, 7, 8 };
108
109 var aOnlyNumbers = numbersA.Except(numbersB);
110
111 Console.WriteLine("Numbers in arrayA but no ArrayB");
112 ObjectDumper.Write(aOnlyNumbers);
113 }
114
115 /// <summary>
116 /// This sample uses Except to create one sequence that contains the first letters of product names that are not also first letters of customer names.
117 /// </summary>
118 public void Linq53()
119 {
120 List<Data.Product> products = Data.GetProductList();
121 List<Data.Customer> customers = Data.GetCustomerList();
122
123 var productFirstChar = from p in products select p.ProductName[0];
124 var customerFirstChar = from c in customers select c.CompanyName[0];
125
126 var productOnlyFirstChar = productFirstChar.Except(customerFirstChar);
127
128 Console.WriteLine("First char only in productFirstChar");
129 ObjectDumper.Write(productOnlyFirstChar);
130 }
131 }
132 }