zoukankan      html  css  js  c++  java
  • 关于Linq中Lambda的一些基础性问题

    学习Linq也有些时间了,开始时不是很习惯,越用越发现它的便捷。最近看了和使用了一段时间Lambda表达式,发现这也的确是个好东西。
    当我们通过Linq查询或者其他方式产生了一个IQueryable<T>对象时,比如是在我们从产品表中查询产品的列表
    IQueryable<Product> product = from p in db.Products select p;

    如果我们想从这个product列表中取出ProductID为5的一项,我们当然可以用for或者foreach进行遍历比较,也可以再写个Linq语句进行下查询,这几个方法都完全可以取到指定的ProductID的Product。

    for方法

     
          Product proOne;
    for (int i = 0; i < product.Count(); i++)
    {
    if (product.ToList().ElementAt(i).ProductID== 5)
    {
    proOne = product.ToList().ElementAt(i);
    }
    }

     foreach方法和for方法类似,不再赘述,

    Linq查询: 

    proOne = (from p in product where p.ProductID== 5 select p).ToList().ElementAt(0);

    以上方法是不是用点麻烦,并且将Linq延迟查询的优点抹去了,那么来看看Lambda表达式方法:

    proOne = product.Single(p => p.ProductID== 5);

    只需短短的几个字就完成了上面几个方法中繁琐的步骤,且很好的保留了Linq延迟查询的优点。这样写程序是不是感觉很爽呢?
    体会到了Lambda表达式的优点,下面再来看看Lambda表达式其他的一些用法,介绍两种最常用的吧,Where和Select
    首先是Select方法:

    var proIDList = product.Select(p => p.ProductID > 5);


    可以发现Select方法和Single方法里面的语句类似,其实他们返回的对象是不同的,Single方法是取出列表中的一个对象。Select方法是取出 列表中符合条件的多个对象的 某个字段的值 的列表。
    在这条语句中Select方法返回的就是个 IEnumerable<int>对象,而Single返回的是一个Product对象,下面的Where方法返回的则是IEnumerable<Product>一个对象列表:

    var proList = product.Where(p => p.ProductID > 5);

    Where产生的是一列Product对象,要注意和Select方法区别。

    这是我学到的一些东西,希望和大家分享,若是有问题,还请博友多多指正。

  • 相关阅读:
    vue小结
    ES6中的super关键字
    es5和es6
    雅虎工程师提供的CSS初始化示例代码
    移动端rem用法总结
    批量压缩图片
    cordova
    cordova 添加插件时报错相关问题
    JS 数组中对象去重 reduce 用法
    中间件笔录
  • 原文地址:https://www.cnblogs.com/shiyue/p/2006621.html
Copyright © 2011-2022 走看看