Здравствуйте. Не так давно начал изучать entity framework и linq to sql. Не всё ещё понимаю. Пытаюсь сделать выборку вот таким вот запросом:
Subjects s = db.Subjects.Where(q => q.Name == comboBox1.Text);
Ругается:
'System.Linq.IQueryable' to 'Questioning.Models.Subjects'. An explicit conversion exists (are you missing a cast?)
Но при этом если делаю это всё в блоке foreach, тогда всё нормально:
foreach(Subjects q in db.Subjects.Where(q => q.Name == comboBox1.Text))
{
}
В чём разница? Подскажите пожалуйста.
Subjects - это DbSet< YourType> .Он НЕ реализует интерфейс IQueryable. А в вашем коде происходит неявное приведение IQueryable< YourType > к DbSet< YourType >, отсюда и исключение. В таком случае вы можете сделать следующее:
1 Вариант:
var s = db.YourType.Where(q => q.Name == comboBox1.Text); // как по мне лучший вариант
2 Вариант:
IQueryable<YourType> = db.YourType.Where(q => q.Name == comboBox1.Text);
А что насчет foreach. Так в foreach(var item in YourCollection), item имеет тип элемента из коллекции, которую вы перебираете. Использую LINQ вы получаете на выходе IQuerylable или IEnumerable, которые поддерживает Foreach, что позволяет читать коллекцию, но тут важно помнить, что при использовании foreach нельзя добавлять или удалять элементы из коллекции внутри цикла, т.к это ломает итератор. Но это уже тема для другой статьи:)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости