[英]Lambda function with two input parameter in linq Select clause
[英]Lambda function in LINQ select clause
想象這樣的代碼:
return from pair in pairs.AsParallel()
let var1 = ... // var1 is typeof(int)
let var2 = ...
let var3 = ...
let var4 = ...
let var5 = ...
let var6 = ... // var6 is typeof(IEnumerable<int[]>)
from v in var6
select { v[0] = var1; return v; };
LINQ select子句不允許這種構造,但是我可以使用普通的lambda select語句來做到這一點,例如:
foo.Select(v => { v[0] = var1; return v; });
由於我需要大量的“ let”子句,因此我寧願使用第一種語法,而不要使用第二種語法。 我怎樣才能做到這一點? 我只需要為v
數組的第一項分配一個值(基於查詢中的復雜計算),然后返回整個數組。
有一個類似的問題 ,不幸的是沒有提供任何解決方案。 我的印象是兩種編寫查詢的方式都是完全相同的,那么我該怎么做呢?
我認為您不能僅在查詢中執行此操作。 這里的說明說,它列出了select
可以具有的所有可能形式。 同樣,我知道您不能將let
與lambda表達式一起使用。
有一種解決方法可讓您獲得相似的結果。 您可以創建一個單獨的函數,然后在您選擇的函數中調用它:
int[] MyFunc(int[] a, int var1)
{
a[0] = var1;
return a;
}
//In the query:
from v in var6
select MyFunc(v);
如果您不想每次都調用新函數,則還可以在查詢外部定義一個委托,使用lambda函數為其創建實例,並以相同的方式在查詢中調用lambda函數。
delegate int[] MyDelegate(int[] x, int y);
MyDelegate del = (v, var1) => { v[0] = var1; return v; }; //<--lambda goes here
//Start query
return from pair in pairs.AsParralel()
...
from v in var6
select del(v, var1);
看起來不太好,但是可以用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.