文档章节

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

深圳大道
 深圳大道
发布于 2016/12/29 15:33
字数 3806
阅读 2
收藏 0
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);
    }
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/44873251

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
asp.net core系列 32 EF查询数据 必备知识(1)

asp.net core系列 32 EF查询数据 必备知识(1) 一.查询的工作原理   Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C#(或你选择的其他 .NET 语...

优惠券活动
02/26
0
0
Linq初级班 Linq To XML体验(基础篇)

LINQ To XML体验(基础) 这两天开始学习LINQ to XML的知识,我会继续把自己的感想和示例发布给初学者们学习的,一样欢迎高手们多多指点,请勿使用过激语言,针锋相对,我是个初学者,自知还有许多不...

老朱教授
2017/10/01
0
0
LINQ 的 Java 示例--java-linq-examples

java-linq-examples 是 101 个 LINQ 示例的 Java 移植版本。Android 兼容 Java 1.7. 此外还有以下语言移植版本: Swift Clojure Dart...

叶秀兰
2015/08/04
879
0
LINQ to XML LINQ学习第一篇

1、LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDocument() { string path = @"d:website"; XDocument xdoc = new XDocument(new XDe......

幕三少
2013/08/14
0
0
EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

十年河东,十年河西,莫欺少年穷。 EF就如同那个少年,ADO.NET则是一位壮年。毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET。 也就是说:你所写的LINQ查询,最后还是要转化为ADO.N...

天才小龙
2018/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部