var productGroups =
from p in products
group p by p.Category into g
where g.Group.All(p => p.UnitsInStock > 0)
select new {Category = g.Key, Products = g.Group}; ObjectDumper.Write(productGroups, 1); }
Aggregate Operators Count - Simple public void Linq73() {
int[] factorsOf300 = { 2, 2, 3, 5, 5 };
int uniqueFactors = factorsOf300.Distinct().Count();
Console.WriteLine(\ }
Count - Conditional public void Linq74() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
Console.WriteLine(\s); }
Count - Indexed
public void Linq75() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddEvenMatches = numbers.Count((n, index) => n % 2 == index % 2); Console.WriteLine(\ \ }
Count - Nested
public void Linq76() {
List customers = GetCustomerList(); var orderCounts =
from c in customers
select new {c.CustomerID, OrderCount = c.Orders.Count()}; ObjectDumper.Write(orderCounts); }
Count - Grouped
public void Linq77() {
List products = GetProductList(); var categoryCounts =
from p in products
group p by p.Category into g
select new {Category = g.Key, ProductCount = g.Group.Count()}; ObjectDumper.Write(categoryCounts); }
Sum - Simple
public void Linq78() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; double numSum = numbers.Sum();
Console.WriteLine(\ }
Sum - Projection
public void Linq79() {
string[] words = { \
double totalChars = words.Sum(w => w.Length);
Console.WriteLine(\ }
Sum - Grouped
public void Linq80() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
select new {Category = g.Key, TotalUnitsInStock = g.Group.Sum(p => p.UnitsInStock)}; ObjectDumper.Write(categories); }
Min - Simple
public void Linq81() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int minNum = numbers.Min();
Console.WriteLine(\ }
Min - Projection
public void Linq82() {
string[] words = { \ int shortestWord = words.Min(w => w.Length);
Console.WriteLine(\ }
Min - Grouped
public void Linq83() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
select new {Category = g.Key, CheapestPrice = g.Group.Min(p => p.UnitPrice)}; ObjectDumper.Write(categories); }
Min - Elements public void Linq84() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
from minPrice = g.Group.Min(p => p.UnitPrice)
select new {Category = g.Key, CheapestProducts = g.Group.Where(p => p.UnitPrice == minPrice)};
ObjectDumper.Write(categories, 1); }
Max - Simple
public void Linq85() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int maxNum = numbers.Max();
Console.WriteLine(\ }
Max - Projection
public void Linq86() {
string[] words = { \
int longestLength = words.Max(w => w.Length);
Console.WriteLine(\ }
Max - Grouped
public void Linq87() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
select new {Category = g.Key, MostExpensivePrice = g.Group.Max(p => p.UnitPrice)}; ObjectDumper.Write(categories);
}
Max - Elements
public void Linq88() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
from maxPrice = g.Group.Max(p => p.UnitPrice)
select new {Category = g.Key, MostExpensiveProducts = g.Group.Where(p => p.UnitPrice == maxPrice)};
ObjectDumper.Write(categories, 1); }
Average - Simple public void Linq89() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; double averageNum = numbers.Average();
Console.WriteLine(\ }
Average - Projection public void Linq90() {
string[] words = { \
double averageLength = words.Average(w => w.Length);
Console.WriteLine(\ }
Average - Grouped public void Linq91() {
List products = GetProductList(); var categories =
from p in products
group p by p.Category into g
select new {Category = g.Key, AveragePrice = g.Group.Average(p => p.UnitPrice)}; ObjectDumper.Write(categories); }
Fold - Simple
public void Linq92() {
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
double product = doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);
Console.WriteLine(\
}
Fold - Seed
public void Linq93() {
double startBalance = 100.0;
int[] attemptedWithdrawals = { 20, 10, 40, 50, 10, 70, 30 }; double endBalance =
attemptedWithdrawals.Fold(startBalance, (balance, nextWithdrawal) =>
( (nextWithdrawal <= balance) ? (balance - nextWithdrawal) : balance ) ); Console.WriteLine(\ }
Miscellaneous Operators Concat - 1
public void Linq94() {
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; int[] numbersB = { 1, 3, 5, 7, 8 };
var allNumbers = numbersA.Concat(numbersB); Console.WriteLine(\ foreach (var n in allNumbers) { Console.WriteLine(n); } }
Concat - 2
public void Linq95() {
List customers = GetCustomerList(); List products = GetProductList(); var customerNames = from c in customers select c.CompanyName; var productNames = from p in products
select p.ProductName;
var allNames = customerNames.Concat(productNames); Console.WriteLine(\ foreach (var n in allNames) { Console.WriteLine(n); } }
EqualAll - 1
public void Linq96() {