LINQ之運算子轉換

2021-08-25 07:01:11 字數 1392 閱讀 5215

使用 asenumerable可返回型別化為泛型 ienumerable 的引數。在此示例中,linq to sql(使用預設泛型 query)會嘗試將查詢轉換為 sql 並在伺服器上執行。但 where 子句引用使用者定義的客戶端方法 (isvalidproduct),此方法無法轉換為 sql。

解決方法是指定 where 的客戶端泛型ienumerable 實現以替換泛型iqueryable。可通過呼叫 asenumerable運算子來執行此操作。

var q =

from p in db.products.asenumerable()

where isvalidproduct(p)

select p;

語句描述:這個例子就是使用asenumerable以便使用where的客戶端ienumerable實現,而不是預設的iqueryable將在伺服器上轉換為sql並執行的預設query實現。這很有必要,因為where子句引用了使用者定義的客戶端方法isvalidproduct,該方法不能轉換為sql。

使用 toarray 可從序列建立陣列。

var q =

from c in db.customers

where c.city == "london"

select c;

customer qarray = q.toarray();

語句描述:這個例子使用 toarray 將查詢直接計算為陣列。

使用 tolist可從序列建立泛型列表。下面的示例使用 tolist直接將查詢的計算結果放入泛型 list。

var q =

from e in db.employees

where e.hiredate >= new

datetime(1994, 1, 1)

select e;

list

qlist = q.tolist();

使用enumerable.todictionary方法可以將序列轉化為字典。tsource表示source中的元素的型別;tkey表示keyselector返回的鍵的型別。其返回乙個包含鍵和值的dictionary。

var q =

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)

語句描述:這個例子使用 todictionary 將查詢和鍵表示式直接鍵表示式直接計算為 dictionary。

本文摘自:

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。例如 ...