Linq101-Aggregate

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 
  5 namespace Linq101
  6 {
  7     class Aggregate
  8     {
  9         /// <summary>
 10         /// This sample uses Count to get the number of unique factors of 300.
 11         /// </summary>
 12         public void Linq73()
 13         {
 14             int[] factorsOf300 = { 2, 2, 3, 5, 5 };
 15 
 16             var uniqueFactors = factorsOf300.Distinct().Count();
 17 
 18             Console.WriteLine("There are {0} unique factors of 300.", uniqueFactors);
 19         }
 20 
 21         /// <summary>
 22         /// This sample uses Count to get the number of odd ints in the array.
 23         /// </summary>
 24         public void Linq74()
 25         {
 26             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
 27 
 28             var oddNumbers = numbers.Count(n => n % 2 == 1);
 29 
 30             Console.WriteLine("There are {0} odd numbers in the list.", oddNumbers);
 31         }
 32 
 33         /// <summary>
 34         /// This sample uses Count to return a list of customers and how many orders each has.
 35         /// </summary>
 36         public void Linq76()
 37         {
 38             List<Data.Customer> customers = Data.GetCustomerList();
 39 
 40             var orderCounts = from c in customers
 41                               select new { Customer = c.CustomerID, orderCount = c.Orders.Count() };
 42 
 43             ObjectDumper.Write(orderCounts);
 44         }
 45 
 46         /// <summary>
 47         /// This sample uses Count to return a list of categories and how many products each has.
 48         /// </summary>
 49         public void Linq77()
 50         {
 51             List<Data.Product> products = Data.GetProductList();
 52 
 53             var categoryCounts = from p in products
 54                                  group p by p.Category
 55                                      into g
 56                                      select new { Category = g.Key, Count = g.Count() };
 57 
 58             ObjectDumper.Write(categoryCounts);
 59         }
 60 
 61         /// <summary>
 62         /// This sample uses Sum to get the total of the numbers in an array.
 63         /// </summary>
 64         public void Linq78()
 65         {
 66             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
 67 
 68             decimal total = numbers.Sum();
 69 
 70             Console.WriteLine("The sum of the numbers is {0}", total);
 71         }
 72 
 73         /// <summary>
 74         /// This sample uses Sum to get the total number of characters of all words in the array.
 75         /// </summary>
 76         public void Linq79()
 77         {
 78             string[] words = { "cherry", "apple", "blueberry" };
 79 
 80             var totalChars = words.Sum(w => w.Length);
 81 
 82             Console.WriteLine("There are a total of {0} characters in these words", totalChars);
 83         }
 84 
 85         /// <summary>
 86         /// This sample uses Sum to get the total units in stock for each product category.
 87         /// </summary>
 88         public void Linq80()
 89         {
 90             List<Data.Product> products = Data.GetProductList();
 91 
 92             var categories = from p in products
 93                              group p by p.Category
 94                                  into g
 95                                  select new { Category = g.Key, TotalStock = g.Sum(p => p.UnitsInStock) };
 96 
 97             ObjectDumper.Write(categories);
 98         }
 99 
100         /// <summary>
101         /// This sample uses Min to get the lowest number in an array.
102         /// </summary>
103         public void Linq81()
104         {
105             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
106 
107             int minNumber = numbers.Min();
108 
109             Console.WriteLine("The minimum number is {0}", minNumber);
110         }
111 
112         /// <summary>
113         /// This sample uses Min to get the length of the shortest word in an array.
114         /// </summary>
115         public void Linq82()
116         {
117             string[] words = { "cherry", "apple", "blueberry" };
118 
119             var shortestWord = words.Min(w => w.Length);
120 
121             Console.WriteLine("The shortest word is {0} characters long.", shortestWord);
122         }
123 
124         /// <summary>
125         /// This sample uses Min to get the cheapest price among each category's products.
126         /// </summary>
127         public void Linq83()
128         {
129             List<Data.Product> products = Data.GetProductList();
130 
131             var categroys = from p in products
132                             group p by p.Category
133                                 into g
134                                 select new { Category = g.Key, CheapestPrice = g.Min(p => p.UnitPrice) };
135 
136             ObjectDumper.Write(categroys);
137         }
138 
139         /// <summary>
140         /// This sample uses Min to get the products with the cheapest price in each category.
141         /// </summary>
142         public void Linq84()
143         {
144             List<Data.Product> products = Data.GetProductList();
145 
146             var categorys = from p in products
147                             group p by p.Category
148                                 into g
149                                 let minPrice = g.Min(p => p.UnitPrice)
150                                 select new { Category = g.Key, CheapestProducts = g.Where(p => p.UnitPrice == minPrice) };
151 
152             ObjectDumper.Write(categorys, 1);
153         }
154 
155         /// <summary>
156         /// This sample uses Max to get the highest number in an array.
157         /// </summary>
158         public void Linq85()
159         {
160             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
161 
162             int maxNum = numbers.Max();
163 
164             Console.WriteLine("The maximum number is {0}", maxNum);
165         }
166 
167         /// <summary>
168         /// This sample uses Max to get the length of the longest word in an array.
169         /// </summary>
170         public void Linq86()
171         {
172             string[] words = { "cherry", "apple", "blueberry" };
173 
174             int longestLength = words.Max(w => w.Length);
175 
176             Console.WriteLine("The longest word is {0} characters long.", longestLength);
177         }
178 
179         /// <summary>
180         /// This sample uses Max to get the most expensive price among each category's products.
181         /// </summary>
182         public void Linq87()
183         {
184             List<Data.Product> products = Data.GetProductList();
185 
186             var categorys = from p in products
187                             group p by p.Category
188                                 into g
189                                 select new { category = g.Key, price = g.Max(p => p.UnitPrice) };
190 
191             ObjectDumper.Write(categorys);
192         }
193 
194         /// <summary>
195         /// This sample uses Max to get the products with the most expensive price in each category.
196         /// </summary>
197         public void Linq88()
198         {
199             List<Data.Product> products = Data.GetProductList();
200 
201             var categorys = from p in products
202                             group p by p.Category
203                                 into g
204                                 let maxPrice = g.Max(p => p.UnitPrice)
205                                 select new { Category = g.Key, product = g.Where(p => p.UnitPrice == maxPrice) };
206 
207             ObjectDumper.Write(categorys, 1);
208         }
209 
210         /// <summary>
211         /// This sample uses Average to get the average of all numbers in an array.
212         /// </summary>
213         public void Linq89()
214         {
215             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
216 
217             double averageNumber = numbers.Average();
218 
219             Console.WriteLine("The average number is {0}.", averageNumber);
220         }
221 
222         /// <summary>
223         /// This sample uses Average to get the average length of the words in the array.
224         /// </summary>
225         public void Linq90()
226         {
227             string[] words = { "cherry", "apple", "blueberry" };
228 
229             var averageLength = words.Average(w => w.Length);
230 
231             Console.WriteLine("The average word length is {0} characters.", averageLength);
232         }
233 
234         /// <summary>
235         /// This sample uses Average to get the average price of each category's products.
236         /// </summary>
237         public void Linq91()
238         {
239             List<Data.Product> products = Data.GetProductList();
240 
241             var categorys = from p in products
242                             group p by p.Category
243                                 into g
244                                 select new { Category = g.Key, AveragePrice = g.Average(p => p.UnitPrice) };
245 
246             ObjectDumper.Write(categorys, 1);
247         }
248 
249         /// <summary>
250         /// This sample uses Aggregate to create a running product on the array that calculates the total product of all elements.
251         /// </summary>
252         public void Linq92()
253         {
254             double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
255 
256             //var q = doubles.Aggregate((current, next) => current*next);
257             double product = doubles.Aggregate((runningProduct, nextFactor) => runningProduct * nextFactor);
258 
259             Console.WriteLine("Total product of all numbers: {0}", product);
260         }
261 
262         /// <summary>
263         /// This sample uses Aggregate to create a running account balance that subtracts each withdrawal from the initial balance of 100, as long as the balance never drops below 0.
264         /// </summary>
265         public void Linq93()
266         {
267             double startBalance = 100.0;
268 
269             int[] attemptedWithdrawals = { 20, 10, 40, 50, 10, 70, 30 };
270 
271             //double seed = 100;
272             //double endBalance = attemptedWithdrawals.Aggregate(seed,
273             //    (current, next) => current - next > 0 ? current - next : current);
274 
275             double endBalance = attemptedWithdrawals.Aggregate(startBalance,
276                 (banlance, nextWithdrawal) => (nextWithdrawal <= banlance) ? (banlance - nextWithdrawal) : banlance);
277 
278             Console.WriteLine(endBalance);
279         }
280     }
281 }

 

posted @ 2015-04-22 14:53  David Huang  阅读(181)  评论(0编辑  收藏  举报