forked from rogerwcpt/python-linq-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
317 lines (252 loc) · 10.7 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
using System;
using System.ComponentModel;
using System.Linq;
using linqshared;
namespace linq_aggregate
{
class Program : ProgramBase
{
static void Main(string[] args)
{
Linq73();
// Linq74();
// Linq76();
// Linq77();
// Linq78();
// Linq79();
// Linq80();
// Linq81();
// Linq82();
// Linq83();
// Linq84();
// Linq85();
// Linq86();
// Linq87();
// Linq88();
// Linq89();
// Linq90();
// Linq91();
// Linq92();
// Linq93();
}
[Category("Aggregate Operators")]
[Description("This sample gets the number of unique prime factors of 300.")]
static void Linq73()
{
var primeFactorsOf300 = new [] { 2, 2, 3, 5, 5 };
var uniqueFactors = primeFactorsOf300.Distinct().Count();
Console.WriteLine($"There are {uniqueFactors} unique prime factors of 300.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the number of odd ints in the array.")]
static void Linq74()
{
var numbers = new [] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var oddNumbers = numbers.Count(n => n % 2 == 1);
Console.WriteLine($"There are {oddNumbers} odd numbers in the list.");
}
[Category("Aggregate Operators")]
[Description("This sample uses returns a list of customers and how many orders each has.")]
static void Linq76()
{
var customers = GetCustomerList();
var orderCounts = customers
.Select(cust =>
new
{
cust.CustomerID,
OrderCount = cust.Orders.Count()
});
ObjectDumper.Write(orderCounts);
}
[Category("Aggregate Operators")]
[Description("This sample uses returns a list of categories and how many products each has.")]
static void Linq77()
{
var products = GetProductList();
var categoryCounts = products
.GroupBy(prod => prod.Category)
.Select(prodGroup =>
new
{
Category = prodGroup.Key,
ProductCount = prodGroup.Count()
});
ObjectDumper.Write(categoryCounts);
}
[Category("Aggregate Operators")]
[Description("This sample uses adds all the numbers in an array.")]
static void Linq78()
{
var numbers = new [] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var numSum = numbers.Sum();
Console.WriteLine($"The sum of the numbers is {numSum}.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the total number of characters of all words in the array.")]
static void Linq79()
{
var words = new [] { "cherry", "apple", "blueberry" };
var totalChars = words.Sum(w => w.Length);
Console.WriteLine($"There are a total of {totalChars} characters in these words.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the total units in stock for each product category.")]
static void Linq80()
{
var products = GetProductList();
var categories = products
.GroupBy(prod => prod.Category)
.Select(prodGroup =>
new
{
Category = prodGroup.Key,
TotalUnitsInStock = prodGroup.Sum(p => p.UnitsInStock)
});
ObjectDumper.Write(categories);
}
[Category("Aggregate Operators")]
[Description("This sample uses gets the lowest number in an array.")]
static void Linq81()
{
var numbers = new []{ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var minNum = numbers.Min();
Console.WriteLine($"The minimum number is {minNum}.");
}
[Category("Aggregate Operators")]
[Description("This sample uses gets the length of the shortest word in an array.")]
static void Linq82()
{
var words = new [] { "cherry", "apple", "blueberry" };
var shortestWord = words.Min(w => w.Length);
Console.WriteLine($"The shortest word is {shortestWord} characters long.");
}
[Category("Aggregate Operators")]
[Description("This sample uses gets the cheapest price among each category's products.")]
static void Linq83()
{
var products = GetProductList();
var categories = products
.GroupBy(prod => prod.Category)
.Select(prodGroup =>
new
{
Category = prodGroup.Key,
CheapestPrice = prodGroup.Min(p => p.UnitPrice)
});
ObjectDumper.Write(categories);
}
[Category("Aggregate Operators")]
[Description("This sample gets the products with the lowest price in each category.")]
static void Linq84()
{
var products = GetProductList();
var categories = products.GroupBy(prod => prod.Category)
.Select(prodGroup => new {prodGroup, minPrice = prodGroup.Min(p => p.UnitPrice)})
.Select(x =>
new
{
Category = x.prodGroup.Key,
CheapestProducts = x.prodGroup.Where(p => p.UnitPrice == x.minPrice)
});
ObjectDumper.Write(categories, 1);
}
[Category("Aggregate Operators")]
[Description("This sample gets the highest number in an array. Note that the method returns a single value.")]
static void Linq85()
{
var numbers = new []{ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var maxNum = numbers.Max();
Console.WriteLine($"The maximum number is {maxNum}.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the length of the longest word in an array.")]
static void Linq86()
{
var words = new [] { "cherry", "apple", "blueberry" };
var longestLength = words.Max(w => w.Length);
Console.WriteLine($"The longest word is {longestLength} characters long.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the most expensive price among each category's products.")]
static void Linq87()
{
var products = GetProductList();
var categories = products
.GroupBy(prod => prod.Category)
.Select(prodGroup =>
new
{
Category = prodGroup.Key,
MostExpensivePrice = prodGroup.Max(p => p.UnitPrice)
});
ObjectDumper.Write(categories);
}
[Category("Aggregate Operators")]
[Description("This sample gets the products with the most expensive price in each category.")]
static void Linq88()
{
var products = GetProductList();
var categories = products.GroupBy(prod => prod.Category)
.Select(prodGroup => new {prodGroup, maxPrice = prodGroup.Max(p => p.UnitPrice)})
.Select(x =>
new
{
Category = x.prodGroup.Key,
MostExpensiveProducts = x.prodGroup.Where(p => p.UnitPrice == x.maxPrice)
});
ObjectDumper.Write(categories, 1);
}
[Category("Aggregate Operators")]
[Description("This sample gets the average of all numbers in an array.")]
static void Linq89()
{
var numbers = new [] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var averageNum = numbers.Average();
Console.WriteLine($"The average number is {averageNum}.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the average length of the words in the array.")]
static void Linq90()
{
var words = new [] { "cherry", "apple", "blueberry" };
var averageLength = words.Average(w => w.Length);
Console.WriteLine($"The average word length is {averageLength} characters.");
}
[Category("Aggregate Operators")]
[Description("This sample gets the average price of each category's products.")]
static void Linq91()
{
var products = GetProductList();
var categories = products
.GroupBy(prod => prod.Category)
.Select(prodGroup =>
new
{
Category = prodGroup.Key,
AveragePrice = prodGroup.Average(p => p.UnitPrice)
});
ObjectDumper.Write(categories);
}
[Category("Aggregate Operators")]
[Description("This sample uses creates a running product on the array that calculates the total product of all elements.")]
static void Linq92()
{
var doubles = new [] { 1.7, 2.3, 1.9, 4.1, 2.9 };
var product = doubles.Aggregate((runningProduct, nextFactor) => runningProduct * nextFactor);
Console.WriteLine($"Total product of all numbers: {product}");
}
[Category("Aggregate Operators")]
[Description("This sample uses to creates a running account balance that subtracts each withdrawal from the initial balance of 100, as long as the balance never drops below 0.")]
static void Linq93()
{
var startBalance = 100.0;
var attemptedWithdrawals = new []{ 20, 10, 40, 50, 10, 70, 30 };
var endBalance = attemptedWithdrawals
.Aggregate(startBalance,
(balance, nextWithdrawal) =>
((nextWithdrawal <= balance) ? (balance - nextWithdrawal) : balance));
Console.WriteLine($"Ending balance: {endBalance}");
}
}
}