LINQ to SQL語句(18)之運算符轉換

作者: 李永京  來源: 博客園  發布時間: 2008-09-18 17:09  閱讀: 6357 次  推薦: 0   原文鏈接   [收藏]  
摘要:這個系列的第十八篇,講解運算符轉換。

系列文章導航:

LINQ to SQL語句(1)之Where

LINQ to SQL語句(2)之Select/Distinct

LINQ to SQL語句(3)之Count/Sum/Min/Max/Avg

LINQ to SQL語句(4)之Join

LINQ to SQL語句(5)之Order By

LINQ to SQL語句(6)之Group By/Having

LINQ to SQL語句(7)之Exists/In/Any/All/Contains

LINQ to SQL語句(8)之Concat/Union/Intersect/Except

LINQ to SQL語句(9)之Top/Bottom和Paging和SqlMethods

LINQ to SQL語句(10)之Insert

LINQ to SQL語句(11)之Update

LINQ to SQL語句(12)之Delete和使用Attach

LINQ to SQL語句(13)之開放式并發控制和事務

LINQ to SQL語句(14)之Null語義和DateTime

LINQ to SQL語句(15)之String

LINQ to SQL語句(16)之對象標識

LINQ to SQL語句(17)之對象加載

LINQ to SQL語句(18)之運算符轉換

LINQ to SQL語句(19)之ADO.NET與LINQ to SQL

LINQ to SQL語句(20)之存儲過程

LINQ to SQL語句(21)之用戶定義函數

LINQ to SQL語句(22)之DataContext

LINQ to SQL語句(23)之動態查詢

LINQ to SQL語句(24)之視圖

LINQ to SQL語句(25)之繼承

LINQ簡介

adsfsaf

 

運算符轉換

1.AsEnumerable:將類型轉換為泛型 IEnumerable

使用 AsEnumerable<TSource> 可返回類型化為泛型 IEnumerable 的參數。在此示例中,LINQ to SQL(使用默認泛型 Query)會嘗試將查詢轉換為 SQL 并在服務器上執行。但 where 子句引用用戶定義的客戶端方法 (isValidProduct),此方法無法轉換為 SQL。
解決方法是指定 where 的客戶端泛型 IEnumerable<T> 實現以替換泛型 IQueryable<T>。可通過調用 AsEnumerable<TSource>運算符來執行此操作。

var q =
    from p in db.Products.AsEnumerable()
    where isValidProduct(p)
    select p;

語句描述:這個例子就是使用AsEnumerable以便使用Where的客戶端IEnumerable實現,而不是默認的IQueryable將在服務器上轉換為SQL并執行的默認Query<T>實現。這很有必要,因為Where子句引用了用戶定義的客戶端方法isValidProduct,該方法不能轉換為SQL。

2.ToArray:將序列轉換為數組

使用 ToArray <TSource>可從序列創建數組。

var q =
    from c in db.Customers
    where c.City == "London"
    select c;
Customer[] qArray = q.ToArray();

語句描述:這個例子使用 ToArray 將查詢直接計算為數組。

3.ToList:將序列轉換為泛型列表

使用 ToList<TSource>可從序列創建泛型列表。下面的示例使用 ToList<TSource>直接將查詢的計算結果放入泛型 List<T>。

var q =
    from e in db.Employees
    where e.HireDate >= new DateTime(1994, 1, 1)
    select e;
List<Employee> qList = q.ToList();

4.ToDictionary:將序列轉化為字典

使用Enumerable.ToDictionary<TSource, TKey>方法可以將序列轉化為字典。TSource表示source中的元素的類型;TKey表示keySelector返回的鍵的類型。其返回一個包含鍵和值的Dictionary<TKey, TValue>。

var q =
    from p in db.Products
    where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
    select p;
Dictionary<int, Product> qDictionary =
    q.ToDictionary(p => p.ProductID);
foreach (int key in qDictionary.Keys)
{
    Console.WriteLine(key);
}

語句描述:這個例子使用 ToDictionary 將查詢和鍵表達式直接鍵表達式直接計算為 Dictionary<K, T>。

0
0
 
標簽:LINQ LINQ to SQL
 
 

文章列表

全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()