2013-10-01 4 views
1

У меня есть SQL запросОбъединение Entity Framework SQLQuery с дополнительным ограничением в коде

var sql = "Select * From Foo Where Bar = {0}" 

Я хочу, чтобы выполнить это с помощью Entity Framework, но я хочу, чтобы наложить дополнительные ограничения, чтобы увидеть, если столбец Id находится в определенный диапазон:

List<int> ids = ...; 
var MyFoos = context.Foos.SqlQuery<Foo>(sql).Where(x => ids.Contains(x.Id)); 

это может привести к эффективному выбору из базы данных, или это в конечном итоге выполнение всей «Select * From Foo Где Bar = {0}» первым и только затем фильтруют для идентификаторы?

+1

Мое ожидание будет последним, потому что запрос является жестко запрограммированным, а не чем-то, сгенерированным самим EF, и, таким образом, нет возможности для компиляции для улучшения запроса в одном чтении sql –

ответ

2

Оператор SQL в sql будет выполнен с использованием базы данных, и результаты будут возвращены клиенту.

Фильтр .Where(x => ids.Contains(x.Id)); будет выполнен по результатам вашего запроса sql на стороне клиента.

.Where не будет переведен на SQL.

Я проверил это, используя SQL Profiler по аналогичному запросу.

+0

Спасибо, я обязательно избегу этого тогда! –

Смежные вопросы