Linq to SQL - Как получить общее количество результатов при подкачке без двух запросов - PullRequest
4 голосов
/ 29 декабря 2010

У меня следующий запрос LINQ к моей службе IQueryable

Dim eventcount = EventService.QueryEvents().Count
Dim eventlist = EventService.QueryEvents().Skip((page - 1) * 5).Take(5).ToList   

Но мне интересно, есть ли способ сделать это без двух обращений к базе данных?

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Я хотел бы рассмотреть возможность реализации кэширования уровня 2 на счетчике, стараясь, чтобы ключ кэширования содержал соответствующие критерии, и соответственно отменял его.

1 голос
/ 29 декабря 2010

Ну, я столкнулся с той же проблемой некоторое время назад, а потом я придумал LINQ to SP =). Make и SP и поместите их в ваши сущности и используйте их. Вы можете написать Sp в соответствии с вашими потребностями, такими как извлечение записей и столбец общей записи. Это проще и быстрее по сравнению с тем, что вы используете прямо сейчас.

У меня была такая же проблема в прошлом году, а затем, когда дело дошло до производительности, вместо того, чтобы сделать два запроса, я перешел на LINQ to SP , создал хранимую процедуру и вызвал ее через такие сущности, как LINQ к хранимой процедуре =). И моя хранимая процедура сделала все и вернула только те записи, которые мне нужны, и я выполнила разбиение на страницы в конце хранимой процедуры, так что я получала ограниченные данные за раз, а не все данные в приложении.

Вы можете сделать и SP и вставить это в ваши сущности и использовать его. Вы можете написать Sp в соответствии с вашими потребностями, например, вытащить свои записи и общее количество записей в виде столбца. Рассмотрим 1000К записей из 100 таблиц. Медленная производительность ?? Вы можете сделать это с помощью Linq to SQL , сделав Sp на уровне базы данных и вызывая объекты. Это будет намного быстрее, чем тот, который вы пытаетесь достичь =)

...