• 简单的Linq笔记


    最近带一个新人,被问到Linq的一点东西,回答他后,自己记录下,防止自己懵逼。

    Linq中查询一个表中指定的几个字段:

    var ts = t.FindAllItems().Where(P => P.ProductId== outProductId).Select(s => new { ProductName= s.DescProductName,Supplier=s.ProductSupplier}).Distinct().ToList().OrderByDescending(s => s.ivrId).Take(15);

    // FindAllItems()为查询对应表的所有数据的方法;

    // Where 里面为查询条件

    // Select 为查询的筛选条件  new{}  里面就是要查询的字段

    //Distinct() 为去除重复的查询

    //ToList() 为将查询转换为List<>

    //OrderByDescending()  表示排序字段及排序方法(倒序排列)

    //Take(N)  表示查询前N条数据;

    附加两个.net程序员写代码的和Linq相关两个误区:

     1、使用迭代式 (而不是声明式)的语句去操作集合

    //Bad
    decimal total = 0;  
    foreach (Account account in myAccounts) 
    {    
     if (account.Status == "active") 
        {
          total += account.Balance;
        }
    }
    
    //Good
    decimal total = (from account in myAccounts
                   where account.Status == "active"
                    select account.Balance).Sum();

    一个单一的LINQ语句可以轻易地替换掉你代码中一个迭代循环(或嵌套循环)里的几十条语句。更少的代码通常意味着产生Bug的机会也会更少地被引入。

    然而,记住,在性能方面可能要权衡一下。在性能很关键的场景需要权衡使用。

     2、在LINQ语句之中没有考虑底层对象

    decimal total=(from accout in myaccouts
    where accout.status=="active"
          select accout .Balance).sum();

    如果myaccout是Dbset的对象。(默认设置了不同区分大小写的配置),where表达式仍会匹配该元素。然而,如果myaccout是在内存阵列之中,那么它将不匹配,因此将产生不同的总的结果。

  • 相关阅读:
    struts2防止表单重复提交的解决方案
    从调试角度理解ActionContext、OgnlContext、OgnlValueStack的关系
    Struts2输入校验
    struts2异常处理机制
    struts2拦截器的实现原理及源码剖析
    设计模式六大原则(二):里氏替换原则
    设计模式六大原则(一):单一职责原则
    java中的对象、类、包、模块、组件、容器、框架、架构的概念入门
    jwt入门
    ubuntu18.04.2下编译openjdk9源码
  • 原文地址:https://www.cnblogs.com/ericli-ericli/p/5615656.html
Copyright © 2020-2023  润新知