| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ggkwk
10年前发布

101个LINQ示例,包含几乎全部操作

    Restriction Operators        Where - Simple 1        public void Linq1() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            var lowNums =                from n in numbers                where n < 5                select n;            Console.WriteLine("Numbers < 5:");            foreach (var x in lowNums) {                Console.WriteLine(x);            }        }                Where - Simple 2        public void Linq2() {            List products = GetProductList();            var soldOutProducts =                from p in products                where p.UnitsInStock == 0                select p;            Console.WriteLine("Sold out products:");            foreach (var product in soldOutProducts) {                Console.WriteLine("{0} is sold out!", product.ProductName);            }        }                Where - Simple 3        public void Linq3() {            List products = GetProductList();            var expensiveInStockProducts =                from p in products                where p.UnitsInStock > 0 && p.UnitPrice > 3.00M                select p;            Console.WriteLine("In-stock products that cost more than 3.00:");            foreach (var product in expensiveInStockProducts) {                Console.WriteLine("{0} is in stock and costs more than 3.00.", product.ProductName);            }        }                Where - Drilldown        public void Linq4() {            List customers = GetCustomerList();            var waCustomers =                from c in customers                where c.Region == "WA"                select c;            Console.WriteLine("Customers from Washington and their orders:");            foreach (var customer in waCustomers) {                Console.WriteLine("Customer {0}: {1}", customer.CustomerID, customer.CompanyName);                foreach (var order in customer.Orders) {                    Console.WriteLine(" Order {0}: {1}", order.OrderID, order.OrderDate);                }            }        }                Where - Indexed        public void Linq5() {            string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };            var shortDigits = digits.Where((digit, index) => digit.Length < index);            Console.WriteLine("Short digits:");            foreach (var d in shortDigits) {                Console.WriteLine("The word {0} is shorter than its value.", d);            }        }                Projection Operators        Select - Simple 1        public void Linq6() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            var numsPlusOne =                from n in numbers                select n + 1;            Console.WriteLine("Numbers + 1:");            foreach (var i in numsPlusOne) {                Console.WriteLine(i);            }        }                Select - Simple 2        public void Linq7() {            List products = GetProductList();            var productNames =                from p in products                select p.ProductName;            Console.WriteLine("Product Names:");            foreach (var productName in productNames) {                Console.WriteLine(productName);            }        }                Select - Transformation        public void Linq8() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };            var textNums =                 from n in numbers                select strings[n];            Console.WriteLine("Number strings:");            foreach (var s in textNums) {                Console.WriteLine(s);            }                 }                Select - Anonymous Types 1        public void Linq9() {            string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };            var upperLowerWords =                from w in words                select new {Upper = w.ToUpper(), Lower = w.ToLower()};            foreach (var ul in upperLowerWords) {                Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);            }        }                Select - Anonymous Types 2        public void Linq10() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };            var digitOddEvens =                from n in numbers                select new {Digit = strings[n], Even = (n % 2 == 0)};            foreach (var d in digitOddEvens) {                Console.WriteLine("The digit {0} is {1}.", d.Digit, d.Even ? "even" : "odd");            }        }                Select - Anonymous Types 3        public void Linq11() {            List products = GetProductList();            var productInfos =                from p in products                select new {p.ProductName, p.Category, Price = p.UnitPrice};            Console.WriteLine("Product Info:");            foreach (var productInfo in productInfos) {                Console.WriteLine("{0} is in the category {1} and costs {2} per unit.", productInfo.ProductName, productInfo.Category, productInfo.Price);            }        }                Select - Indexed        public void Linq12() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            var numsInPlace = numbers.Select((num, index) => new {Num = num, InPlace = (num == index)});            Console.WriteLine("Number: In-place?");            foreach (var n in numsInPlace) {                Console.WriteLine("{0}: {1}", n.Num, n.InPlace);            }        }                Select - Filtered        public void Linq13() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };            var lowNums =                from n in numbers                where n < 5                select digits[n];            Console.WriteLine("Numbers < 5:");            foreach (var num in lowNums) {                Console.WriteLine(num);            }             }                SelectMany - Compound from 1        public void Linq14() {            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };            int[] numbersB = { 1, 3, 5, 7, 8 };            var pairs =                from a in numbersA,                        b in numbersB                where a < b                select new {a, b};            Console.WriteLine("Pairs where a < b:");            foreach (var pair in pairs) {                Console.WriteLine("{0} is less than {1}", pair.a, pair.b);            }        }                SelectMany - Compound from 2        public void Linq15() {            List customers = GetCustomerList();            var orders =                from c in customers,                        o in c.Orders                where o.Total < 500.00M                select new {c.CustomerID, o.OrderID, o.Total};            ObjectDumper.Write(orders);        }                SelectMany - Compound from 3        public void Linq16() {            List customers = GetCustomerList();            var orders =                from c in customers,                        o in c.Orders                where o.OrderDate >= new DateTime(1998, 1, 1)                select new {c.CustomerID, o.OrderID, o.OrderDate};            ObjectDumper.Write(orders);        }                SelectMany - from Assignment        public void Linq17() {            List customers = GetCustomerList();            var orders =                from c in customers,                        o in c.Orders,                        total = o.Total                where total >= 2000.0M                select new {c.CustomerID, o.OrderID, total};            ObjectDumper.Write(orders);        }                SelectMany - Multiple from        public void Linq18() {            List customers = GetCustomerList();            DateTime cutoffDate = new DateTime(1997, 1, 1);            var orders =                from c in customers                where c.Region == "WA"                from o in c.Orders                where o.OrderDate >= cutoffDate                select new {c.CustomerID, o.OrderID};            ObjectDumper.Write(orders);        }                SelectMany - Indexed        public void Linq19() {            List customers = GetCustomerList();            var customerOrders =                customers.SelectMany(                    (cust, custIndex) =>                    cust.Orders.Select(o => "Customer #" + (custIndex + 1) +                                            " has an order with OrderID " + o.OrderID) );            ObjectDumper.Write(customerOrders);        }                Partitioning Operators        Take - Simple        public void Linq20() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var first3Numbers = numbers.Take(3);                    Console.WriteLine("First 3 numbers:");                    foreach (var n in first3Numbers) {                        Console.WriteLine(n);                    }                }                Take - Nested        public void Linq21() {                    List<Customer> customers = GetCustomerList();                    var first3WAOrders = (                        from c in customers                        from o in c.Orders                        where c.Region == "WA"                        select new {c.CustomerID, o.OrderID, o.OrderDate} )                        .Take(3);                    Console.WriteLine("First 3 orders in WA:");                    foreach (var order in first3WAOrders) {                        ObjectDumper.Write(order);                    }                }                Skip - Simple        public void Linq22() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var allButFirst4Numbers = numbers.Skip(4);                    Console.WriteLine("All but first 4 numbers:");                    foreach (var n in allButFirst4Numbers) {                        Console.WriteLine(n);                    }                }                Skip - Nested        public void Linq23() {                    List<Customer> customers = GetCustomerList();                    var waOrders =                        from c in customers                        from o in c.Orders                        where c.Region == "WA"                        select new {c.CustomerID, o.OrderID, o.OrderDate};                    var allButFirst2Orders = waOrders.Skip(2);                    Console.WriteLine("All but first 2 orders in WA:");                    foreach (var order in allButFirst2Orders) {                        ObjectDumper.Write(order);                    }                }                TakeWhile - Simple        public void Linq24() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);                    Console.WriteLine("First numbers less than 6:");                    foreach (var n in firstNumbersLessThan6) {                        Console.WriteLine(n);                    }                }                SkipWhile - Simple        public void Linq26() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var allButFirst3Numbers = numbers.SkipWhile(n => n % 3 != 0);                    Console.WriteLine("All elements starting from first element divisible by 3:");                    foreach (var n in allButFirst3Numbers) {                        Console.WriteLine(n);                    }                }                SkipWhile - Indexed        public void Linq27() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var laterNumbers = numbers.SkipWhile((n, index) => n >= index);                    Console.WriteLine("All elements starting from first element less than its position:");                    foreach (var n in laterNumbers) {                        Console.WriteLine(n);                    }                }                Ordering Operators        OrderBy - Simple 1        publicvoid Linq28() {            string[] words = { "cherry", "apple", "blueberry" };                        var sortedWords =                from w in words                orderby w                select w;                        Console.WriteLine("The sorted list of words:");            foreach (var w in sortedWords) {                Console.WriteLine(w);            }        }        OrderBy - Simple 2        public void Linq29() {            string[] words = { "cherry", "apple", "blueberry" };            var sortedWords =                from w in words                orderby w.Length                select w;            Console.WriteLine("The sorted list of words (by length):");            foreach (var w in sortedWords) {                Console.WriteLine(w);            }        }                OrderBy - Simple 3        public void Linq30() {            List products = GetProductList();            var sortedProducts =                from p in products                orderby p.ProductName                select p;            ObjectDumper.Write(sortedProducts);        }                OrderBy - Comparer        public class CaseInsensitiveComparer : IComparer<string>        {            public int Compare(string x, string y)            {                return string.Compare(x, y, true);            }        }        public void Linq31() {            string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"};            var sortedWords = words.OrderBy(a => a, new CaseInsensitiveComparer());            ObjectDumper.Write(sortedWords);        }                OrderByDescending - Simple 1        public void Linq32() {            double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };            var sortedDoubles =                from d in doubles                orderby d descending                select d;            Console.WriteLine("The doubles from highest to lowest:");            foreach (var d in sortedDoubles) {                Console.WriteLine(d);            }        }                OrderByDescending - Simple 2        public void Linq33() {            List products = GetProductList();            var sortedProducts =                from p in products                orderby p.UnitsInStock descending                select p;            ObjectDumper.Write(sortedProducts);        }                OrderByDescending - Comparer        public class CaseInsensitiveComparer : IComparerspan class="qs-keyword">string>        {            publicint Compare(string x, string y)            {                returnstring.Compare(x, y, true);            }        }                publicvoid Linq34() {            string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"};                        var sortedWords = words.OrderByDescending(a => a, new CaseInsensitiveComparer());                            ObjectDumper.Write(sortedWords);        }        ThenBy - Simple        publicvoid Linq35() {            string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };                    var sortedDigits =                from d in digits                 orderby d.Length, d                select d;                    Console.WriteLine("Sorted digits:");            foreach (var d in sortedDigits) {                Console.WriteLine(d);            }        }        ThenBy - Comparer        public class CaseInsensitiveComparer : IComparerspan class="qs-keyword">string>        {            publicint Compare(string x, string y)            {                returnstring.Compare(x, y, true);            }        }                publicvoid Linq36() {            string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"};                        var sortedWords =                words.OrderBy(a => a.Length)                        .ThenBy(a => a, new CaseInsensitiveComparer());                            ObjectDumper.Write(sortedWords);        }        ThenByDescending - Simple        publicvoid Linq37() {            List products = GetProductList();var sortedProducts =                from p in products                orderby p.Category, p.UnitPrice descendingselect p;                    ObjectDumper.Write(sortedProducts);        }        ThenByDescending - Comparer        public class CaseInsensitiveComparer : IComparerspan class="qs-keyword">string>        {            publicint Compare(string x, string y)            {                returnstring.Compare(x, y, true);            }        }                publicvoid Linq38() {            string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry"};                        var sortedWords =                words.OrderBy(a => a.Length)                        .ThenByDescending(a => a, new CaseInsensitiveComparer());                            ObjectDumper.Write(sortedWords);        }        Reverse        publicvoid Linq39() {            string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };                        var reversedIDigits = (                from d in digits                where d[1] == 'i'                select d)                .Reverse();                        Console.WriteLine("A backwards list of the digits with a second character of 'i':");            foreach (var d in reversedIDigits) {                Console.WriteLine(d);            }                     }        Grouping Operators        GroupBy - Simple 1        public void Linq40() {                    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    var numberGroups =                        from n in numbers                        group n by n % 5 into g                        select new { Remainder = g.Key, Numbers = g };                    foreach (var g in numberGroups) {                        Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);                        foreach (var n in g.Numbers) {                            Console.WriteLine(n);                        }                    }        }                GroupBy - Simple 2        public void Linq41() {                    string[] words = { "blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese" };                    var wordGroups =                        from w in words                        group w by w[0] into g                        select new { FirstLetter = g.Key, Words = g };                    foreach (var g in wordGroups) {                        Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter);                        foreach (var w in g.Words) {                            Console.WriteLine(w);                        }                    }                }                GroupBy - Simple 3        public void Linq42() {                    List<Product> products = GetProductList();                    var orderGroups =                        from p in products                        group p by p.Category into g                        select new { Category = g.Key, Products = g };                    ObjectDumper.Write(orderGroups, 1);                }                GroupBy - Nested        public void Linq43() {                    List<Customer> customers = GetCustomerList();                    var customerOrderGroups =                         from c in customers                        select                            new {c.CompanyName,                                  YearGroups =                                     from o in c.Orders                                     group o by o.OrderDate.Year into yg                                     select                                         new {Year = yg.Key,                                              MonthGroups =                                                   from o in yg                                                  group o by o.OrderDate.Month into mg                                                  select new { Month = mg.Key, Orders = mg }                                             }                                };                    ObjectDumper.Write(customerOrderGroups, 3);                }                GroupBy - Comparer        public class AnagramEqualityComparer : IEqualityComparer         {         public bool Equals(string x, string y) { return getCanonicalString(x) == getCanonicalString(y); }         public int GetHashCode(string obj) { return getCanonicalString(obj).GetHashCode(); }         private string getCanonicalString(string word)         {             char[] wordChars = word.ToCharArray(); Array.Sort(wordChars); return new string(wordChars);         }         }                         publicvoid Linq44()         {         string[] anagrams = {"from ", " salt", " earn ", " last ", " near ", " form "};         var orderGroups = anagrams.GroupBy(w => w.Trim(), new AnagramEqualityComparer());         ObjectDumper.Write(orderGroups, 1);         }        GroupBy - Comparer, Mapped        public void Linq45() {                    string[] anagrams = {"from ", " salt", " earn ", " last ", " near ", " form "};                    var orderGroups = anagrams.GroupBy(                                w => w.Trim(),                                 a => a.ToUpper(),                                new AnagramEqualityComparer()                                );                    ObjectDumper.Write(orderGroups, 1);                }        public class AnagramEqualityComparer : IEqualityComparer<string>                {                    public bool Equals(string x, string y) {                        return getCanonicalString(x) == getCanonicalString(y);                    }                    public int GetHashCode(string obj) {                        return getCanonicalString(obj).GetHashCode();                    }                    private string getCanonicalString(string word) {                        char[] wordChars = word.ToCharArray();                        Array.Sort<char>(wordChars);                        return new string(wordChars);                    }                }                Set Operators        Distinct - 1        publicvoid Linq46() {            int[] factorsOf300 = { 2, 2, 3, 5, 5 };                        var uniqueFactors = factorsOf300.Distinct();                    Console.WriteLine("Prime factors of 300:");            foreach (var f in uniqueFactors) {                Console.WriteLine(f);            }        }        Distinct - 2        public void Linq47() {            List products = GetProductList();            var categoryNames = (                from p in products                select p.Category)                .Distinct();                                                                Console.WriteLine("Category names:");            foreach (var n in categoryNames) {                Console.WriteLine(n);            }        }        Union - 1        publicvoid Linq48() {            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };            int[] numbersB = { 1, 3, 5, 7, 8 };                        var uniqueNumbers = numbersA.Union(numbersB);                        Console.WriteLine("Unique numbers from both arrays:");            foreach (var n in uniqueNumbers) {                Console.WriteLine(n);            }        }        Union - 2        publicvoid Linq49() {            List products = GetProductList();List customers = GetCustomerList();                        var productFirstChars =                from p in products                select p.ProductName[0];            var customerFirstChars =                from c in customers                select c.CompanyName[0];                        var uniqueFirstChars = productFirstChars.Union(customerFirstChars);                        Console.WriteLine("Unique first letters from Product names and Customer names:");            foreach (var ch in uniqueFirstChars) {                Console.WriteLine(ch);            }        }        Intersect - 1        publicvoid Linq50() {            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };            int[] numbersB = { 1, 3, 5, 7, 8 };                        var commonNumbers = numbersA.Intersect(numbersB);                        Console.WriteLine("Common numbers shared by both arrays:");            foreach (var n in commonNumbers) {                Console.WriteLine(n);            }        }        Intersect - 2        publicvoid Linq51() {            List products = GetProductList();            List customers = GetCustomerList();                        var productFirstChars =                from p in products                select p.ProductName[0];            var customerFirstChars =                from c in customers                select c.CompanyName[0];                        var commonFirstChars = productFirstChars.Intersect(customerFirstChars);                        Console.WriteLine("Common first letters from Product names and Customer names:");            foreach (var ch in commonFirstChars) {                Console.WriteLine(ch);            }        }        Except - 1        public void Linq52() {            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };            int[] numbersB = { 1, 3, 5, 7, 8 };            IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB);            Console.WriteLine("Numbers in first array but not second array:");            foreach (var n in aOnlyNumbers) {                Console.WriteLine(n);            }        }                Except - 2        public void Linq53() {            List products = GetProductList();            List customers = GetCustomerList();            var productFirstChars =                from p in products                select p.ProductName[0];            var customerFirstChars =                from c in customers                select c.CompanyName[0];            var productOnlyFirstChars = productFirstChars.Except(customerFirstChars);            Console.WriteLine("First letters from Product names, but not from Customer names:");            foreach (var ch in productOnlyFirstChars) {                Console.WriteLine(ch);            }        }                Conversion Operators        To Array        public void Linq54() {            double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };            var sortedDoubles =                from d in doubles                orderby d descending                select d;            var doublesArray = sortedDoubles.ToArray();            Console.WriteLine("Every other double from highest to lowest:");            for (int d = 0; d < doublesArray.Length; d += 2) {                Console.WriteLine(doublesArray[d]);            }         }                To List        public void Linq55() {            string[] words = { "cherry", "apple", "blueberry" };            var sortedWords =                from w in words                orderby w                select w;            var wordList = sortedWords.ToList();            Console.WriteLine("The sorted word list:");            foreach (var w in wordList) {                Console.WriteLine(w);            }        }                To Dictionary        public void Linq56() {            var scoreRecords = new [] { new {Name = "Alice", Score = 50},                                        new {Name = "Bob" , Score = 40},                                        new {Name = "Cathy", Score = 45}                                      };            var scoreRecordsDict = scoreRecords.ToDictionary(sr => sr.Name);            Console.WriteLine("Bob's score: {0}", scoreRecordsDict["Bob"]);        }                OfType        public void Linq57() {            object[] numbers = { null, 1.0, "two", 3, 4.0f, 5, "six", 7.0 };            var doubles = numbers.OfType<double>();            Console.WriteLine("Numbers stored as doubles:");            foreach (var d in doubles) {                Console.WriteLine(d);            }        }                Element Operators        First - Simple        public void Linq58() {            List products = GetProductList();            Product product12 = (                from p in products                where p.ProductID == 12                select p )                .First();            ObjectDumper.Write(product12);        }                First - Indexed        public void Linq60() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            int evenNum = numbers.First((num, index) => (num % 2 == 0) && (index % 2 == 0));            Console.WriteLine("{0} is an even number at an even position within the list.", evenNum);        }                FirstOrDefault - Simple        public void Linq61() {            int[] numbers = {};            int firstNumOrDefault = numbers.FirstOrDefault();            Console.WriteLine(firstNumOrDefault);        }                FirstOrDefault - Condition        public void Linq62() {            List products = GetProductList();            Product product789 = products.FirstOrDefault(p => p.ProductID == 789);            Console.WriteLine("Product 789 exists: {0}", product789 != null);        }                FirstOrDefault - Indexed        public void Linq63() {            double?[] doubles = { 1.7, 2.3, 4.1, 1.9, 2.9 };            double? num = doubles.FirstOrDefault((n, index) => (n >= index - 0.5 && n <= index + 0.5));            if (num != null)                Console.WriteLine("The value {1} is within 0.5 of its index position.", num);            else                Console.WriteLine("There is no number within 0.5 of its index position.", num);        }                ElementAt        public void Linq64() {            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            int fourthLowNum = (                from n in numbers                where n < 5                select n )                .ElementAt(3); // 3 because sequences use 0-based indexing            Console.WriteLine("Fourth number < 5: {0}", fourthLowNum);        }                Generation Operators        Range        public void Linq65() {            var numbers =               from n in Sequence.Range(100, 50)               selectnew {Number = n, OddEven = n % 2 == 1 ? "odd" : "even"};            foreach (var n in numbers) {               Console.WriteLine("The number {0} is {1}.", n.Number, n.OddEven);            }         }                Repeat        public void Linq66() {            var numbers = Sequence.Repeat(7, 10);            foreach (var n in numbers) {               Console.WriteLine(n);            }         }                Quantifiers        Any - Simple        public void Linq67() {            string[] words = { "believe", "relief", "receipt", "field" };            bool iAfterE = words.Any(w => w.Contains("ei"));            Console.WriteLine("There is a word that contains in the list that contains 'ei': {0}", iAfterE);         }                Any - Indexed        public void Linq68() {            int[] numbers = { -9, -4, -8, -3, -5, -2, -1, -6, -7 };            bool negativeMatch = numbers.Any((n, index) => n == -index);            Console.WriteLine("There is a number that is the negative of its index: {0}", negativeMatch);         }                Any - Grouped        public void Linq69() {            List products = GetProductList();           var productGroups =               from p in products               group p by p.Category into g               where g.Group.Any(p => p.UnitsInStock == 0)               select new {Category = g.Key, Products = g.Group};            ObjectDumper.Write(productGroups, 1);         }                All - Simple        public void Linq70() {            int[] numbers = { 1, 11, 3, 19, 41, 65, 19 };           bool onlyOdd = numbers.All(n => n % 2 == 1);           Console.WriteLine("The list contains only odd numbers: {0}", onlyOdd);         }                All - Indexed        public void Linq71() {            int[] lowNumbers = { 1, 11, 3, 19, 41, 65, 19 };            int[] highNumbers = { 7, 19, 42, 22, 45, 79, 24 };            bool allLower = lowNumbers.All((num, index) => num < highNumbers[index]);            Console.WriteLine("Each number in the first list is lower than its counterpart in the second list: {0}", allLower);         }                All - Grouped        public void Linq72() {            List products = GetProductList();           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("There are {0} unique factors of 300.", uniqueFactors);         }                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("There are {0} odd numbers in the list.", oddNumbers);         }                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("There are {0} numbers in the list whose odd/even status " +                 "matches that of their position.", oddEvenMatches);         }                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("The sum of the numbers is {0}.", numSum);         }                Sum - Projection        public void Linq79() {           string[] words = { "cherry", "apple", "blueberry" };           double totalChars = words.Sum(w => w.Length);           Console.WriteLine("There are a total of {0} characters in these words.", totalChars);         }                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("The minimum number is {0}.", minNum);         }                Min - Projection        public void Linq82() {            string[] words = { "cherry", "apple", "blueberry" };            int shortestWord = words.Min(w => w.Length);            Console.WriteLine("The shortest word is {0} characters long.", shortestWord);         }                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("The maximum number is {0}.", maxNum);         }                Max - Projection        public void Linq86() {            string[] words = { "cherry", "apple", "blueberry" };            int longestLength = words.Max(w => w.Length);            Console.WriteLine("The longest word is {0} characters long.", longestLength);         }                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("The average number is {0}.", averageNum);         }                Average - Projection        public void Linq90() {            string[] words = { "cherry", "apple", "blueberry" };            double averageLength = words.Average(w => w.Length);            Console.WriteLine("The average word length is {0} characters.", averageLength);         }                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("Total product of all numbers: {0}", product);         }                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("Ending balance: {0}", endBalance);         }                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("All numbers from both arrays:");            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("Customer and product names:");            foreach (var n in allNames) {                Console.WriteLine(n);            }        }                EqualAll - 1        public void Linq96() {            var wordsA = new string[] { "cherry", "apple", "blueberry" };            var wordsB = new string[] { "cherry", "apple", "blueberry" };            bool match = wordsA.EqualAll(wordsB);            Console.WriteLine("The sequences match: {0}", match);        }                EqualAll - 2        public void Linq97() {            var wordsA = new string[] { "cherry", "apple", "blueberry" };            var wordsB = new string[] { "apple", "blueberry", "cherry" };            bool match = wordsA.EqualAll(wordsB);            Console.WriteLine("The sequences match: {0}", match);        }                Custom Sequence Operators        Combine        public static class CustomSequenceOperators        {            public static IEnumerable Combine(this IEnumerable first, IEnumerable second, Func func) {                using (IEnumerator e1 = first.GetEnumerator(), e2 = second.GetEnumerator()) {                    while (e1.MoveNext() && e2.MoveNext()) {                        yield return func(e1.Current, e2.Current);                    }                }            }        }        public void Linq98() {                        int[] vectorA = { 0, 2, 4, 5, 6 };            int[] vectorB = { 1, 3, 5, 7, 8 };            int dotProduct = vectorA.Combine(vectorB, (a, b) => a * b).Sum();            Console.WriteLine("Dot product: {0}", dotProduct);        }                Query Execution        Deferred        public void Linq99() {            // Sequence operators form first-class queries that            // are not executed until you enumerate over them.            int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            int i = 0;            var q =                from n in numbers                select ++i;            // Note, the local variable 'i' is not incremented            // until each element is evaluated (as a side-effect):            foreach (var v in q) {                Console.WriteLine("v = {0}, i = {1}", v, i);                     }         }                Immediate        public void Linq100() {            // Methods like ToList() cause the query to be            // executed immediately, caching the results.            int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };                    int i = 0;            var q = (                from n in numbers                select ++i )                .ToList();            // The local variable i has already been fully            // incremented before we iterate the results:            foreach (var v in q) {                Console.WriteLine("v = {0}, i = {1}", v, i);            }         }                Query Reuse        public void Linq101() {            // Deferred execution lets us define a query once            // and then reuse it later after data changes.            int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };            var lowNumbers =                from n in numbers                where n <= 3                select n;            Console.WriteLine("First run numbers <= 3:");            foreach (int n in lowNumbers) {                Console.WriteLine(n);            }            for (int i = 0; i < 10; i++) {                numbers[i] = -numbers[i];            }            // During this second run, the same query object,            // lowNumbers, will be iterating over the new state            // of numbers[], producing different results:            Console.WriteLine("Second run numbers <= 3:");            foreach (int n in lowNumbers) {                Console.WriteLine(n);            }        }