運算子轉換

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>。

arrow
arrow
    文章標籤
    LINQ LINQ to SQL
    全站熱搜

    Jimmy 發表在 痞客邦 留言(0) 人氣()