LINQ 使用方法


int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };       var lowNums =         from n in numbers         where n < 5         select n; List<Product> products = GetProductList();       var soldOutProducts =         from p in products         where p.UnitsInStock == 0         select p;    List<Product> products = GetProductList();       var expensiveInStockProducts =         from p in products         where p.UnitsInStock > 0 && p.UnitPrice > 3.00M         select p;  List<Customer> customers = GetCustomerList();       var waCustomers =         from c in customers         where c.Region == "WA"         select c; string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };       var shortDigits = digits.Where((digit, index) => digit.Length < index); int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };       var numsPlusOne =         from n in numbers         select n + 1;  List<Product> products = GetProductList();       var productNames =         from p in products         select p.ProductName; 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]; string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };       var upperLowerWords =         from w in words         select new { Upper = w.ToUpper(), Lower = w.ToLower() };   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) }; int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };       var numsInPlace = numbers.Select((num, index) => new { Num = num, InPlace = (num == index) });   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];  int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };     int[] numbersB = { 1, 3, 5, 7, 8 };       var pairs =         from a in numbersA         from b in numbersB         where a < b         select new { a, b };  List<Customer> customers = GetCustomerList();       var orders =         from c in customers         from o in c.Orders         where o.Total < 500.00M         select new { c.CustomerID, o.OrderID, o.Total };     List<Customer> customers = GetCustomerList();       var orders =         from c in customers         from o in c.Orders         where o.OrderDate >= new DateTime(1998, 1, 1)         select new { c.CustomerID, o.OrderID, o.OrderDate }; List<Customer> customers = GetCustomerList();       var orders =         from c in customers         from o in c.Orders         where o.Total >= 2000.0M         select new { c.CustomerID, o.OrderID, o.Total };  List<Customer> 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 };  List<Customer> customers = GetCustomerList();       var customerOrders =         customers.SelectMany(             (cust, custIndex) =>             cust.Orders.Select(o => "Customer #" + (custIndex + 1) +                                     " has an order with OrderID " + o.OrderID));     int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var first3Numbers = numbers.Take(3);

 

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var allButFirst4Numbers = numbers.Skip(4);

 

All but first 4 numbers: 





0

 

 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);

 

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);

 

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);  int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var allButFirst3Numbers = numbers.SkipWhile(n => n % 3 != 0);

3
9
8
6
7
2

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };     var laterNumbers = numbers.SkipWhile((n, index) => n >= index);  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);         }     }     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); 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 }                         }             };

GroupBy - Comparer

This sample uses GroupBy to partition trimmed elements of an array using a custom comparer that matches words that are anagrams of each other.

1.      public void Linq44()
2.      {
3.          string[] anagrams = { "from   ", " salt", " earn ", "  last   ", " near ", " form  " };
4.       
5.          var orderGroups = anagrams.GroupBy(w => w.Trim(), new AnagramEqualityComparer());
6.       
7.          ObjectDumper.Write(orderGroups, 1);
8.      }
9.       
10.  public class AnagramEqualityComparer : IEqualityComparer<string>
11.  {
12.      public bool Equals(string x, string y)
13.      {
14.          return getCanonicalString(x) == getCanonicalString(y);
15.      }
16.   
17.      public int GetHashCode(string obj)
18.      {
19.          return getCanonicalString(obj).GetHashCode();
20.      }
21.   
22.      private string getCanonicalString(string word)
23.      {
24.          char[] wordChars = word.ToCharArray();
25.          Array.Sort<char>(wordChars);
26.          return new string(wordChars);
27.      }
28.  }

Result

...
from 
form 
...
salt
last 
...
earn 
near

GroupBy - Comparer, Mapped

This sample uses GroupBy to partition trimmed elements of an array using a custom comparer that matches words that are anagrams of each other, and then converts the results to uppercase.

1.      public void Linq45()
2.      {
3.          string[] anagrams = { "from   ", " salt", " earn ", "  last   ", " near ", " form  " };
4.       
5.          var orderGroups = anagrams.GroupBy(
6.                      w => w.Trim(),
7.                      a => a.ToUpper(),
8.                      new AnagramEqualityComparer()
9.                      );
10.   
11.      ObjectDumper.Write(orderGroups, 1);
12.  }
13.   
14.  public class AnagramEqualityComparer : IEqualityComparer<string>
15.  {
16.      public bool Equals(string x, string y)
17.      {
18.          return getCanonicalString(x) == getCanonicalString(y);
19.      }
20.   
21.      public int GetHashCode(string obj)
22.      {
23.          return getCanonicalString(obj).GetHashCode();
24.      }
25.   
26.      private string getCanonicalString(string word)
27.      {
28.          char[] wordChars = word.ToCharArray();
29.          Array.Sort<char>(wordChars);
30.          return new string(wordChars);
31.      }
32.  }

Result

...
FROM 
FORM 
...
SALT
LAST 
...
EARN 
NEAR

转载于:https://www.cnblogs.com/senion/archive/2011/07/04/LINQ.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值