LINQ例子说明

bin520

贡献于2012-01-05

字数:25943 关键词: .NET开发

101个LINQ 例子 说明:本文摘抄自Microsoft的MSDN网站,因为原文不方便快速阅读和学习,故此调整如下。本文所有权利归Microsoft公司所有。如果您觉得本文侵犯了您的著作权,请来信告知,我将即时改正!多谢! 所有的代码运行结果请点击代码上的链接,到MSDN网站去看。 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 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 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 {     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 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 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         {             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);             }         } 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 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();     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);     } }

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档