На данный вопрос уже ответили:
Здравствуйте, создал консольное приложение с entity framework. Для загрузки данных использую принцип lazy load. И всё работает если написать вот так вот:
Context db = new Context();
var teams = db.Teams.ToList();
foreach(Team t in teams)
{
Console.WriteLine("Team named is {0} ", t.Name);
foreach(Player p in t.Players)
Console.WriteLine("In team {0}, have player {1}", t.Name, p.Name);
}
Console.ReadKey();
То есть я в в варовскую переменную гружу лист команд, и к ней всё подтягивается. И когда я перебираю всё в цикле всё норм, но если я буду грузить не лист, а iqueryable, то есть вот так вот:
var teams = db.Teams;
В таком случае будет ошибка:
Объясните пожалуйста, почему так происходит? Почему я не могу получить из такого вида данных коллекцию игроков?
Как правильно заметил tym32167, "необходимо материализовать запрос в коллекцию", из сырого IQueryable. Из-за ленивой загрузки, данные в IQueryable не подгружаются полностью, пока их не представишь в коллекцию. Например в List. Подробней можно почитать тут.
upd. Возможно, вам поможет такой код:
var players = db.Teams
.Include(x=>x.Players) // включает в себя игроков (и тогда их можно прочитать из IQueryable и/или преобразовать в список)
Либо собрать только игроков, сразу в коллекцию:
var players = db.Teams
.SelectMany(x=>x.Players)
.ToList();
В любом случае, оставлять запрос как IQueryable, для передачи куда-либо, не рекомендуется.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
После десериализации xml документа в виде строки полученной с WCF сервера, иногда возникает ошибка
В результате чего не сортируется лист велосипедов по ценеВыбрасывается ошибка