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是在内存阵列之中,那么它将不匹配,因此将产生不同的总的结果。

  • 相关阅读:
    [C语言]数据类型与计算
    [C语言]变量VS常量
    [C语言]在命令行编译执行程序
    [cocos2d-x]游戏开发基础(图)
    [cocos2d-x]移动平台游戏开发(图)
    [cocos2d-x]认识游戏开发(图)
    [jQ/PHP]再谈使用JS数组储值的运用(提交PHP处理)
    [Nginx]Nginx的基本配置与优化1(完整配置示例与虚拟主机配置)
    [JS]如何理解JS中的类和对象
    [jPlayer]一分钟部署jPlayer
  • 原文地址:https://www.cnblogs.com/ericli-ericli/p/5615656.html
Copyright © 2011-2022 走看看