您的位置:首页 - 教程 - .NET - 正文
简单的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是在内存阵列之中,那么它将不匹配,因此将产生不同的总的结果。


评论: