Queryable.Where()
すべての要素を呼び出して取得したいと思います。Where()
述語関数なしで機能するバージョンはありません。だから私はこれを正さなければなりません:
var result = table.Where( x => true );
それは機能しますが、それは私には本当にばかげていると感じます-x
決して使用されることはなく、=>
「矢印」記号の「変換」はありません。
よりエレガントな解決策はありますか?
よりエレガントな以下を使用できます。
var result = table;
result
完全に省略してtable
直接使用することもできます。
table.Where(x=>true)
本質的にはヌープではありませんか?つまり、ポイントは何ですか?ただし、慣用的な_
代わりに使用できます。x
table.Where(_=> true);
しかし、実際には、次のことがあなたがしていることです。
for (var item in table)
{
if (true) // your Where() clause..
{
yield item;
}
}
それが本当に意味をなさない方法を見てください?
table.Where( x => true )
「すべての要素を返す」ではありません。で列挙されているときに要素のサブセットを返すのに十分な情報を持つ列挙可能オブジェクトを返すだけです。列挙するまで、要素は「返されません」。
また、この場合、このサブセットは適切ではないため(つまり、すべての要素が返されます)、これは基本的にノーオペレーションです。
すべての要素を列挙するには、単純な、を記述します。またはforeach
、または実際に要素を返すことを気にしない場合(そして、おそらく副作用のために列挙したい場合):または、または単に。ToList
ToArray
table.All(x => true)
table.Any(x => false)
table.Count()
この場合、Queryableをフィルタリングしていないため、Whereを呼び出す必要はありません。
それでもWhereを呼び出したい場合で、これを多くの場所で行う場合は、静的Funcを定義して、それを再利用できます。
public static Func<int, bool> t = ReturnTrue;
public static bool ReturnTrue(int i)
{
return true;
}
table.Where(t);
table
参照の代わりにの内容のコピーを取得しようとしている場合は、
var result = table.ToList();
しかし、それが本当にあなたが達成しようとしていることであるかどうかは明らかではありません。詳細?