使用 asenumerable可返回型別化為泛型 ienumerable 的引數。在此示例中,linq to sql(使用預設泛型 query)會嘗試將查詢轉換為 sql 並在伺服器上執行。但 where 子句引用使用者定義的客戶端方法 (isvalidproduct),此方法無法轉換為 sql。
解決方法是指定 where 的客戶端泛型ienumerable 實現以替換泛型iqueryable。可通過呼叫 asenumerable運算子來執行此操作。
var q =語句描述:這個例子就是使用asenumerable以便使用where的客戶端ienumerable實現,而不是預設的iqueryable將在伺服器上轉換為sql並執行的預設query實現。這很有必要,因為where子句引用了使用者定義的客戶端方法isvalidproduct,該方法不能轉換為sql。from p in db.products.asenumerable()
where isvalidproduct(p)
select p;
使用 toarray 可從序列建立陣列。
var q =語句描述:這個例子使用 toarray 將查詢直接計算為陣列。from c in db.customers
where c.city == "london"
select c;
customer qarray = q.toarray();
使用 tolist可從序列建立泛型列表。下面的示例使用 tolist直接將查詢的計算結果放入泛型 list。
var q =使用enumerable.todictionary方法可以將序列轉化為字典。tsource表示source中的元素的型別;tkey表示keyselector返回的鍵的型別。其返回乙個包含鍵和值的dictionary。from e in db.employees
where e.hiredate >= new
datetime(1994, 1, 1)
select e;
list
qlist = q.tolist();
var q =語句描述:這個例子使用 todictionary 將查詢和鍵表示式直接鍵表示式直接計算為 dictionary。from p in db.products
where p.unitsinstock <= p.reorderlevel && !p.discontinued
select p;
dictionary
qdictionary =
q.todictionary(p => p.productid);
foreach (int key in qdictionary.keys)
本文摘自:
linq和轉換運算子
兩種常用用法 使用ilspy檢視enumerable中的toarray 原始碼分析 我們發現如果該型別可以轉化為icollection,我們最後執行copyto方法,如果不能轉換為icollection,那麼就執行foreach。原始碼分析 如果可以轉換為icollection,就是用copyto方...
linq標準查詢運算子
適用場景 對查詢出的語句進行排序,比如按時間排序等等。說明 按指定表示式對集合排序 延遲,按指定表示式對集合排序 延遲,預設是公升序,加上descending表示降序,對應的擴充套件方法是orderby和orderbydescending 這個例子使用 orderby 按雇用日期對雇員進行排序 va...
運算子 轉換
1.算數運算子 l 自身加一 有前加和後加 l 自身減一 有前減和後減 l 前加加 先加一再運算 l 後加加 先取原值,運算後在加1 l 前減減 先自身減1再運算 l 後減減 先取原值運算後再減一 例 int num 10 l int number 10 num 先取原值,參與運算最後在加1。例如 ...