标准查询运算符

一、概述
         LINQ是.NET的一个扩展,是语言集成查询。LINQ查询会发出为对扩展方法和泛型委托的调用,而这些扩展方法和泛型委托都是.NET Framework不可或缺的组成部分。
   LINQ查询均开始于关键字from。那么为什么开头的不是像SQL中的select开头呢?这个嘛,我们可以从考虑投影开始。在select子句中,可以定义新类型,并根据源类型元素了解初始化这种新类型的命名属性。如果select在前面的话,当我们使用命名初始化这样的功能来定义一个投影的时候,因为投影的类型在这个时候还是未知的,这就是一个很合理的理由了。

二、筛选器
         共有两类,一为带有Where子句的传统筛选器;一种为OfType(用于筛选出能够转换为特定类型的值)。

三、限定符
    All、Any、Contains,均返回一个布尔值,指示集合中的部分或全部元素是否满足限定符的参数条件。All判断每个成员是否都满足条件。Any指示是否有满足条件的成员。Contains用于查找符合条件的单个元素。

四、Skip和Take实现分区操作

      Skip(根据参数跳转到集合的指定位置,并返回该位置后面的每一个元素)、SkipWhile (接受一个谓词而不是一个位置,它将忽略过使谓词为false的元素)、Take(获取序列中指定位置之前的全部元素)以及TakeWhile(获取序列中所有使谓词为true的元素)用于将集合拆分成两个部分并返回其中的一个,这些拆分功能只被实现为扩展方法。
【示例】
using System;
using System.Collections.Generic;
using System.Linq;

namespace 利用Skip和Take实现分区操作
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = new int[] { 1, 42, 3, 4, 5, 23, 8, 19, 23, 56, 9, 12, 24, 36, 33, 6, 66 };
            var result1 = numbers.Skip(10);
            foreach (var item in result1)
                Console.Write(item+" ");
            Console.WriteLine();
            var result2 = numbers.Take(10);
            foreach (var item in result2)
                Console.Write(item + " ");
            Console.WriteLine();
            IEnumerable<int> result3 = numbers.OrderByDescending(i=>i).SkipWhile(i => i > 30);
            foreach (var item in result3)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
            var result4 = numbers.OrderByDescending(i=>i).TakeWhile(i => i > 25);
            foreach (var item in result4)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
            var result5 = numbers.Skip(10).Take(5);
            foreach (var item in result5)
            {
                Console.Write(item + " ");
            }

            Console.ReadKey();
        }
    }
}

五、使用生成运算

     生成运算符包括DefaultEmpty、Empty、Range以及Repeat。他们都是实现为扩展方法的。生成运算用于创建新的值序列。
     Empty: 用于创建指定类型的空集合
     Range:用于填充一个新的整数序列。参数:start,count

     Repeat:用一个重复值来填充序列
【示例】
using System;
using System.Linq;

namespace 使用生成运算
{
    class Program
    {
        static void Main(string[] args)
        {
            var empties = Enumerable.DefaultIfEmpty<char>(Enumerable.Empty<char>());
            Console.WriteLine("Count: {0}", empties.Count());

            var sequence = Enumerable.Range(10, 10);
            foreach (var item in sequence)
            {
                Console.Write(item + "  ");
            }

            var someSStrings = Enumerable.Repeat("weixiaoqi", 20);
            Array.ForEach(someSStrings.ToArray(), s => Console.WriteLine(s));
            Console.ReadKey();
        }
    }
}

六、通过Concat串联序列
using System;
using System.Linq;

namespace 通过Concat串联序列
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = new int[] { 1, 2, 3, 4, 5, 6 };
            var moreNumbers = new int[] { 7, 8, 9, 10 };
            foreach (var n in numbers.Concat(moreNumbers))
            {
                Console.Write(n + "  ");//1,2,3,...,10
            }
            Console.ReadKey();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值