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方法区别。

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

  • 相关阅读:
    使用helm管理复杂kubernetes应用
    helm repository 相关
    PSQLException: An I/O error occurred while sending to the backend.
    使用helm进行kubernetes包管理
    Slave作为其它Slave的Master时使用
    ext3是对ext2文件系统的一个扩展高性能日志文件系统
    ready是先执行的,load后执行,DOM文档的加载步骤
    jQuery上定义插件并重设插件构造函数
    在PHP与HTML混合输入的页面或者模板中就需要对PHP代码进行闭合
    decode 函数将字符串从某种编码转为 unicode 字符
  • 原文地址:https://www.cnblogs.com/shiyue/p/2006621.html
Copyright © 2011-2022 走看看