Выборка данных с помощью LinqToSql

158
06 марта 2018, 01:37

Здравствуйте. Не так давно начал изучать 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))
                {
                }

В чём разница? Подскажите пожалуйста.

Answer 1

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 нельзя добавлять или удалять элементы из коллекции внутри цикла, т.к это ломает итератор. Но это уже тема для другой статьи:)

READ ALSO
Как упорядочить массив по типам?

Как упорядочить массив по типам?

Существует массив из объектов-наследников класса Car: PassengerCar, FreightCar и SpecializedFreightCar

164
Вывод данных через OleDbDataAdapter

Вывод данных через OleDbDataAdapter

Всем привет! Допустим я хочу вывести данные после коннектора OleDbConnectionStringBuilderГде написать sql запрос и выполнить его значения?

196
Объединение методов для int, long, double, BigInteger в один

Объединение методов для int, long, double, BigInteger в один

Здравствуйте, товарищи! Уже давно мучаюсь с тем, что не могу ограничить обобщенные методы определёнными классамиИ вот вновь появилась такая...

187
Material Design TabControl

Material Design TabControl

Как сделать TabControl в стиле Materil DesignИспользую библиотеку MaterialDesignInXamltoolkit, но не понимаю, как на нем реализовать именно TabControl

192