2

この LINQ 式を別の .SelectMany() フォームで記述する方法は?

var result = 
                    from a in numbersA
                    where a < 3
                    from b in numbersB
                    where b < 5
                    select new { a, b };

?

var result = numbersA.Where(x => x < 3).Select.. ?

4

2 に答える 2

4

これは、コンパイラが行うことの大まかな翻訳です。

var result = numbersA.Where(a => a < 3)
                     .SelectMany(a => numbersB, (a, b) => new { a, b })
                     .Where(z => z.b < 5)
                     .Select(z => new { z.a, z.b });

これで、これをより効率的に次のように書くことができます。

var result = numbersA.Where(a => a < 3)
                     .SelectMany(a => numbersB.Where(b => b < 5),
                                 (a, b) => new { a, b });

...しかし、それはコンパイラが行うことではありません。コンパイラが何をするのかを確認するのが目的なのか、単にクエリを作成するのが目的なのかは明確ではありません。

于 2012-10-18T15:45:32.067 に答える
3

何かのようなもの

var result = numbersA.Where(a => a < 3).SelectMany(a =>
    numbersB.Where(b => b < 5).Select(b => new { a, b }));

numbersB 1回だけフィルタリングする方が効率的である可能性があることに注意してください。

var filteredB = numbersB.Where(b => b < 5).ToArray();
var result = numbersA.Where(a => a < 3).SelectMany(a =>
    filteredB.Select(b => new { a, b }));
于 2012-10-18T15:42:57.793 に答える