zoukankan      html  css  js  c++  java
  • 简单的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是在内存阵列之中,那么它将不匹配,因此将产生不同的总的结果。

  • 相关阅读:
    不走弯路,就是捷径
    小白逆袭之路
    java期末设计(十三周)
    java第6次作业
    java第五次作业
    java第四次作业
    第三次作业
    第二次作业
    对异常的看法
    java学习笔记(一)
  • 原文地址:https://www.cnblogs.com/ericli-ericli/p/5615656.html
Copyright © 2011-2022 走看看