2016-04-19 16 views
0

私はクエリ構文式を持っていますが、これを拡張メソッド構文式に変換できません。LINQ - 2つの配列から選択

List<int> arr1 = new List<int>(); 
List<int> arr2 = new List<int>(); 

var nerArr = from a1 in arr1 
       from a2 in arr2 
       let sum = a1 + a2 
       where sum > 10 
       where sum < 20 
       select new { a1, a2, sum }; 

ありがとう:

これは、元の表現です。

+0

なぜメソッド構文に変換する必要がありますか?それともあなたは好奇心が強いのですか? –

+0

'var nerArr2 = arr1.SelectMany(a1 => arr2、(a1、a2)=>新しい{a1 = a1、a2 = a2、合計= a1 + a2})。 sum> 10 && a.sum <20).Select(a => new {a.a1、a.a2、a.sum}); – Habib

+0

を練習してください。あなたのクエリは機能します。ありがとう。 –

答えて

0

それは、いつものように、メソッドの構文を使用してはるかに簡単だ - クロス・ジョインはいえライブの例(オリジナルとこの実装を示す)

var nerArr2 = arr1.Join(arr2, x => true, y => true, (a1,a2) => new {a1,a2,sum=a1+a2}) 
       .Where(x => x.sum > 10 && x.sum <20); 

を探して少し奇妙です:http://rextester.com/MSY85791

あなたもこれを行うことができますSelectManyと同じです。

+1

私はそれが「より簡単です」とは反対です。クエリの構文は、ジョインでは非常にクリーンです。 –

+0

結合の場合は、すべての場合はいいえ。そして、もし私が 'CrossJoin'という非常に速い拡張メソッドを書いたなら、これはもっと簡単に見えるでしょう - ' arr1.CrossJoin(arr2、(x、y)=> new {...}) ' – Jamiec

+0

what ' )=> true、y => true'? nullを除外していますか? – cableload