IQueryable количество запрашиваемых данных - PullRequest
2 голосов
/ 02 апреля 2012

Я пытаюсь получить количество элементов, поскольку я применяю запрос к IQueryable.

Я пытаюсь сделать это следующим образом:

this.lblSth.Text = new Repository<Sth>().GetAll().Where(p => p.PersonId == personId).ToList().Count().ToString();

Я думаюэто получает все данные через условие и берет объекты, тогда это берет счет;поэтому мне любопытно, если, например, я просто возьму столбцы Id и приведу их к списку или как-то иначе;эта операция подсчета будет быстрее?

Info: GetAll () => Это метод шаблона репозитория, который возвращает объекты IQueryable T из объекта данных linqToSql.

Я открыт для всех типов различныхидеи.Спасибо

Ответы [ 3 ]

1 голос
/ 02 апреля 2012

Я думаю, что вызов Where и ToList является избыточным. см. ниже.

this.lblSth.Text = new Repository<Sth>().GetAll().Count(p => p.PersonId == personId).ToString();
1 голос
/ 02 апреля 2012

Если вы хотите сделать это быстрее, просто не звоните ToList():

this.lblSth.Text = new Repository<Sth>().GetAll()
                                        .Where(p => p.PersonId == personId)
                                        .Count()
                                        .ToString();

Таким образом (при условии поддержки IQueryable<T> с поддержкой SQL) он выполнит запрос наподобие SELECT COUNT(*) FROM …, а не SELECT * FROM …, как ваш подход.И этот запрос должен быть намного быстрее.

0 голосов
/ 02 апреля 2012

ToList () выполнит запрос и превратит ваш IQUeryable в IEnumerable. Я бы назвал счет на пункт где. Таким образом, Count станет частью конечного запроса

...