Если я запрашиваю EF, используя что-то вроде этого ...Force IEnumerable <T> оценить без вызова .ToArray() или .ToList()
IEnumerable<FooBar> fooBars = db.FooBars.Where(o => o.SomeValue == something);
IIRC, Это создает ленивую-оценивали, Iterable государственную машину в фон, который еще не содержит никаких результатов; скорее, он содержит выражение «как» для получения результатов, когда это необходимо.
Если я хочу, чтобы заставить коллекцию содержать результаты, которые я должен позвонить .ToArray()
или .ToList()
Есть ли способ, чтобы заставить IEnumerable<T>
коллекцию, чтобы содержать результаты без вызова .ToArray()
или .ToList();
?
Обоснование
Я не знаю, если CLR способен сделать это, но, по сути, я хочу, чтобы принудительно создать оцененную коллекцию, которая реализует интерфейс IEnumerable<T>
, но реализуется под капотом в CLR , таким образом нЕList<T>
или Array<T>
Предположительно, это не представляется возможным, так как я не знаю ни возможности CLR для создания в памяти, оцениваемые коллекции, которые реализуют IEnumerable<T>
Предложение
Скажем, например, я мог бы написать что-то вроде этого:
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 *, поэтому вам нужен список, массив или какой-либо другой тип коллекции. –