1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4
5 namespace Linq101
6 {
7 class Ordering
8 {
9 /// <summary>
10 /// This sample uses orderby to sort a list of words alphabetically.
11 /// </summary>
12 public void Linq28()
13 {
14 string[] words = { "cherry", "apple", "blueberry" };
15
16 var sortedWords = from w in words
17 orderby w
18 select w;
19
20 Console.WriteLine("The sorted list of words:");
21 foreach (var word in sortedWords)
22 {
23 Console.WriteLine(word);
24 }
25 }
26
27 /// <summary>
28 /// This sample uses orderby to sort a list of words by length.
29 /// </summary>
30 public void Linq29()
31 {
32 string[] words = { "cherry", "apple", "blueberry" };
33
34 var sortedWords = from w in words
35 orderby w.Length
36 select w;
37
38 Console.WriteLine("The sorted list of words( by length ):");
39 foreach (var word in sortedWords)
40 {
41 Console.WriteLine(word);
42 }
43 }
44
45 /// <summary>
46 /// This sample uses orderby to sort a list of products by name.
47 /// </summary>
48 public void Linq30()
49 {
50 var products = Data.GetProductList();
51
52 var query = from p in products
53 orderby p.ProductName
54 select p;
55
56 ObjectDumper.Write(query);
57 }
58
59 /// <summary>
60 /// This sample uses an OrderBy clause with a custom comparer to do a case-insensitive sort of the words in an array.
61 /// </summary>
62 public void Linq31()
63 {
64 string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
65
66 var query = words.OrderBy(w => w, new CaseInsensitiveComparer());
67
68 ObjectDumper.Write(query);
69 }
70
71 private class CaseInsensitiveComparer : IComparer<string>
72 {
73 public int Compare(string x, string y)
74 {
75 return string.Compare(x, y, StringComparison.InvariantCultureIgnoreCase);
76 }
77 }
78
79 /// <summary>
80 /// This sample uses orderby and descending to sort a list of doubles from highest to lowest.
81 /// </summary>
82 public void Linq32()
83 {
84 double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
85
86 var sortedDoubles = from d in doubles
87 orderby d descending
88 select d;
89
90 ObjectDumper.Write(sortedDoubles);
91 }
92
93 /// <summary>
94 /// This sample uses orderby to sort a list of products by units in stock from highest to lowest.
95 /// </summary>
96 public void Linq33()
97 {
98 var products = Data.GetProductList();
99
100 var query = from p in products
101 orderby p.UnitsInStock descending
102 select p;
103
104 ObjectDumper.Write(query);
105 }
106
107 /// <summary>
108 /// This sample uses an OrderBy clause with a custom comparer to do a case-insensitive descending sort of the words in an array.
109 /// </summary>
110 public void Linq34()
111 {
112 string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
113
114 var query = words.OrderByDescending(w => w, new CaseInsensitiveComparer());
115
116 ObjectDumper.Write(query);
117 }
118
119 /// <summary>
120 /// This sample uses a compound orderby to sort a list of digits, first by length of their name, and then alphabetically by the name itself.
121 /// </summary>
122 public void Linq35()
123 {
124 string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
125
126 var sortedDigits = from d in digits
127 orderby d.Length, d
128 select d;
129
130 Console.WriteLine("Sorted digits:");
131 foreach (var d in sortedDigits)
132 {
133 Console.WriteLine(d);
134 }
135 }
136
137 /// <summary>
138 /// This sample uses an OrderBy and a ThenBy clause with a custom comparer to sort first by word length and then by a case-insensitive sort of the words in an array.
139 /// </summary>
140 public void Linq36()
141 {
142 string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
143
144 var sortedWords = words
145 .OrderBy(w => w.Length)
146 .ThenBy(w => w, new CaseInsensitiveComparer());
147
148 ObjectDumper.Write(sortedWords);
149 }
150
151 /// <summary>
152 /// This sample uses a compound orderby to sort a list of products, first by category, and then by unit price, from highest to lowest.
153 /// </summary>
154 public void Linq37()
155 {
156 var products = Data.GetProductList();
157
158 var query = from p in products
159 orderby p.Category, p.UnitPrice descending
160 select p;
161
162 ObjectDumper.Write(query);
163 }
164
165 /// <summary>
166 /// This sample uses an OrderBy and a ThenBy clause with a custom comparer to sort first by word length and then by a case-insensitive descending sort of the words in an array.
167 /// </summary>
168 public void Linq38()
169 {
170 string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
171
172 var sortedWords = words.OrderBy(w => w.Length).ThenByDescending(w => w, new CaseInsensitiveComparer());
173
174 ObjectDumper.Write(sortedWords);
175 }
176
177 /// <summary>
178 /// This sample uses Reverse to create a list of all digits in the array whose second letter is 'i' that is reversed from the order in the original array.
179 /// </summary>
180 public void Linq39()
181 {
182 string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
183
184 var sortedDigits = (from d in digits
185 where d[1] == 'i'
186 select d)
187 .Reverse();
188
189 ObjectDumper.Write(sortedDigits);
190 }
191 }
192 }