Linq 学习之必备概念

1、Linq概念

      就一查询表达式,其他可以查MSDN

2、类型推断和var关键词

      代码如下:

var i = 15;

int sum = i + 30;

       代码理解说明:那么变量i由CLR去推断他的类型,var关键词并不是某种特别类型的符号,它是句语法上的速记,表示任何可以从初始化的右边推断出的类型。在上个声明中,它就是int的速记。

       使用var关键字有一些重要的条件

       1.只能用于本地变量,不能用于字段

       2.只能在变量声明中包含初始化时使用

 

      C#与Javascript中的var的区别

       js中的var他是一种类型(js是弱类型语言),还c#则是相当一样速记(媒介)来使用,这不改变C#的强类型性质。

3、序列化与元素的概念

       Linq最基本的数据单元是序列(sequences)和元素(element),一个序列是实现了IEnumerable<T>的对象,一个序列包含N过元素(element),如下代码names则代表一个可查询的序列,其中的“Rock”,“Alice”,”Tome”则是每一个元素。

            string[] names ={ "Rock","Alice","Tom"};

            var filterNames = names.Where(p => p.Length >= 4);

            foreach (var name in filterNames)
            {
                Console.WriteLine(name);
            }

      

4、扩展方法

     语法如下:

/// <summary>
/// 判断所有元素都包含指定字符
/// </summary>
/// <param name="list">序列</param>
/// <param name="fraction">字符</param>
/// <returns></returns>
public static bool PassString(this IEnumerable list, string fraction)
{
     foreach (var item in list)
     {
         if (!item.ToString().Contains(fraction))
             return false;
     }
     return true;
}

     扩展方法解决了我们不能为编译好的新增方法的烦劳。

     扩展方法重要需要如下:

     1、必须是静态方法

     2、必须发展静态类中

     3、方法的第一个关键字必须用this关键词,第二this之后必须指定扩展类的名称。 

5、查询语法与方法语法(Linq的呈现形式)

           //Linq的呈现形式
            int[] numbers = { 10,5,20,32,69,33,9};

            var filterNumbers_select = from number in numbers      //查询语法
                                where number > 20
                                select number;

            var filterNumbers_method = numbers.Where(number => number > 20);//方法语法(此处的Where就是一个扩展方法)

            var filerNumbers_select_method_count = (from number in numbers//两种形式的组合
                                              where number > 20
                                              select number).Count();

            说明:此处filterNumbers_selectfilterNumbers_methodfilerNumbers_select_method 叫查询变量,理解查询变量的内容很重要,在执行以上代码后,filterNumbers_selectfilterNumbers_method不会包含查询结果,他包含的是IEnumerable<int>类型的对象,查询变量filerNumbers_select_method_count

包含的则是真实的查询结果(整数类型),这个结果只能通过真实运行后才能获得。

           区别在于查询的执行时间,可以总结如下:

            如果查询表达式返回枚举,查询直到处理枚举时才真正执行查询这个动作,如果枚举对象被用上多次,则执行查询的这个动作也会被处理多次。

            如果查询表达式返回标量,查询则立马执行,并把查询结果保存到查询变量中。

转载于:https://www.cnblogs.com/rockhe/archive/2011/11/06/2237810.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值