LINQ有很多值得学习的地方,这里我们主要介绍使用LINQ Where扩展方法,包括介绍书写带Where子句的LINQ等方面。
我们除了可以如下方式书写带Where子句的LINQ外:
- from p in products where p.UnitsInStock > 0 && p.UnitPrice > 3.00M select p;
还可以对数组(所有实现了IEnumerable接口的对象都可以)的使用LINQ here扩展方法。
把一个查询语句写成多个扩展函数的方式,这其实是编译器处理查询语句的方法,比如下面的查询语句:
- int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };
- var m = from n in arr where n < 5 orderby n select n;
编译器在编译后,替我们产生的代码等价于如下的代码:
- IOrderedSequence m = arr.Where(delegate (int n) {
- return (n < 5);
- }).OrderBy(delegate (int n) {
- return n;
- });
下面我们来看一个使用LINQ here扩展方法的例子:
我们有一个字符串数组,一次是0到9的英文单词,我们查询出这10个字符的长度比它所在数组的位置 这两个数字比较小的英文单词.
这个查询可能有些绕口,你可以先看下面这些代码:
- public static void LinqDemo01()
- {
- string[] digits = { "zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine" };- var shortDigits = digits.Where((dd, aa) => dd.Length < aa);
- Console.WriteLine("Short digits:");
- foreach (var d in shortDigits)
- Console.WriteLine("The word {0} is shorter than its value.", d);
- }
输出结果:
- Short digits:
- The word five is shorter than its value.
- The word six is shorter than its value.
- The word seven is shorter than its value.
- The word eight is shorter than its value.
- The word nine is shorter than its value.
【编辑推荐】