我是Joins的業餘愛好者,但我試圖使用表達式鏈接語法而不是LINQ語句。我發現的大多數例子都使用了數組或列表{Lists <class
>};但沒有數組列表{名單<array
>}在lambda表達式鏈接語法中加入列表<Array>
List<int[]> needHelp = new List<int[]>{
new int[3] { 10, 20, 50},
new int[3] { 10, 21, 53},
new int[3] { 10, 22, 55},
new int[3] { 11, 20, 60},
new int[3] { 11, 22, 51} };
List<int[]> ghosts = new List<int[]>{
new int[3] { 10, 45, 65},
new int[3] { 11, 34, 60} };
的LINQ「查詢」語法的工作原理是:
List<int[]> result = (from h in needHelp join g in ghosts on h[0] equals g[0]
where h[1] == 21 select g).ToList();
但這種「方法」表達鏈語法不是爲我工作:
List<int[]> result = needHelp.Join(ghosts, x=>x[0], y=>y[0], (x,y) => y).Where(x => x[1] == 21).ToList();
對於那些有興趣我已經發現,這lambda表達式鏈可以打印出陣列的列表,而無需使用兩個foreach循環。
result.ForEach(x => { Array.ForEach(x, e => Console.Write(e + " ")); Console.WriteLine();});
好吧,我想我找到了我自己的解決方案,它是通過改變where子句的位置。但是,在加入之前哪裏必須來到,而不是之後要去的原因是什麼?我在帖子上看到,如果這是一個數據庫調用where類在「.Join」之前,那麼它在服務器上而不是客戶端上處理。然後,我假設在連接之後嘗試使用它,這是剩餘數據的超出範圍,在這種情況下將是y(列表<int[]
> ghosts)。
是的,這就是我認識到,返回關加入僅僅是Y(鬼),因此這裏來了之後就沒有結果。 另外我也明白,在lambda完全獨立於X的Join中,這是一個KeyPointer需要幫助。 – Edward
這個答案對我有幫助,而且這個答案已經有超過一百個觀點,所以也許它幫助了其他人;希望如果有的話,未來的任何人都可以幫助你解決問題。如果您覺得這是一個很好的問題,我想要求您提出這個問題並進行徹底解釋。謝謝 – Edward
您也可以將我的答案標記爲正確答案! –