LINQ (L2E) с хранимой процедурой и IQueryable - PullRequest
0 голосов
/ 08 апреля 2011

Предположим, что нормальное выражение Linq будет примерно таким:
(Это просто пример, чтобы сделать вещи более понятными)

 IQueryable<Person> personQuery= (from ppl in PersonContext  
                      select ppl).ASQueryable();


List<Person>personList = personQuery.where(x => x.age==13).ToList();

Так что, если я решил поместить первую часть запроса linq в хранимую процедуру,
все получится примерно так.

 IQueryable<Person> personQuery= PersonContext.sp_RetrievePerson().ASQueryable();

 List<Person> personList = personQuery.where(x => x.age==13).ToList();

Итак, я считаю, что 1-й метод отправляет вызов sql только при вызове toList ().
Другими словами, запрос, отправленный в sql для выполнения, будет

Select * from Person where age=13

Но для метода 2 сколько раз этот запрос будет отправлен на выполнение?
Если он отправляется только 1 раз, делает ли это избыточным вызов хранимой процедуры, поскольку известно, что хранимая процедура имеет более быстрое выполнение, и как будет выглядеть запрос, отправленный в sql?

1 Ответ

2 голосов
/ 08 апреля 2011

Я не уверен насчет этого, но PersonContext.sp_RetrievePerson() возвращает ObjectResult, который внутренне использует DbDataReader.Это означает, что хранимая процедура вызывается один раз, personQuery.where(x => x.age==13) выполняет итерацию по результирующим строкам и отфильтровывает несоответствующие объекты.

Используя для этого хранимые процедуры, вы можете получить небольшой выигрыш в производительности при запросах к базе данных,но вы должны оценить каждый объект в таблице лиц, ПОСЛЕ чтения из базы данных.Поэтому я думаю, что в этом сценарии использование хранимых процедур имеет смысл, только если вы предоставите хранимой процедуре параметр age для фильтрации результатов, уже находящихся в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...