程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 簡單的Linq筆記

簡單的Linq筆記

編輯:關於.NET

最近帶一個新人,被問到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是在內存陣列之中,那麼它將不匹配,因此將產生不同的總的結果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved