私はこのようなものを使用してEFを照会した場合...フォースのIEnumerable <T> .ToArray()または.ToListを(呼び出すことなく評価する)
IEnumerable<FooBar> fooBars = db.FooBars.Where(o => o.SomeValue == something);
IIRC、まだ結果を含んでいない背景。むしろ、必要なときに結果を得るための「方法」の表現を含んでいます。
私は.ToArray()
または.ToList()
を呼び出す必要があり、結果を格納するコレクションを強制したい場合は.ToArray()
または.ToList();
を呼び出さずに結果を格納するためにIEnumerable<T>
コレクションを強制する方法はありますか?
理由
CLRがこれを行うことが可能であるかどうかは知りませんが、基本的に私は強制的にIEnumerable<T>
インターフェイスを実装、評価、コレクションを作成したいのですが、CLRによりボンネットの下に実装されています、したがって私は、インメモリ作成するために、任意のCLR機能を認識していないよので、ませList<T>
またはArray<T>
は、おそらくこれは、可能ではない、IEnumerable<T>
提案
言ってやる例えば、私はこのような何か書くことができる:これはfooBars
内のすべての項目を評価することを
foreach (var item in fooBars) { }
注:foreach
ループを使用することができます
var x = IEnumerable<FooBar> fooBars = db.FooBars
.Where(o => o.SomeValue == something)
.Evaluate(); // Does NOT return a "concrete" impl such as List<T> or Array<T>
Console.WriteLine(x.GetType().Name);
// eg. <EvaluatedEnumerable>e__123
'.ToList()'を呼び出すと何が問題になりますか? – user3185569
はい。 'Foreach'ループを使用します。 –
結果は* something *に格納しなければならないので、リスト、配列またはその他のコレクション型が必要です。 –