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

運算符轉換

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>可從序列建立數組。spa

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

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

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

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

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

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

相關文章
相關標籤/搜索