#nhibernate #count #projection #rowcount
#nhibernate #подсчитывать #проекция #количество строк #подсчет
Вопрос:
В чем точная разница между NHibernates
Projection.RowCount()
и
Projection.Count()
когда мы ищем количество строк / результатов?
Ответ №1:
Проекция.Count ожидает, что вы передадите свойство, на которое вы хотите произвести подсчет, т.е
Projection.Count("propertyName")
которое преобразуется в следующее в SQL
select Count(this.whateverNhibernateConvention) from table as this
что касается проекции.Количество строк вам не нужно передавать ничего, что переводится в
select Count(1) from table as this
Я думаю, я ожидаю, что вышесказанное будет иметь место
Комментарии:
1. Во втором выражении это не должно быть
select Count(*)
? Я не знаю, в какихselect count(1)
результатах, но я думаю (по крайней мере, в Transact-SQL) это должно быть «count (*)», чтобы соответствовать вашему второму объяснению?2. Нет, выберите count (1) в полном порядке.. Функции COUNT не нужно извлекать все поля из таблицы, как это было при использовании синтаксиса COUNT(*). Он просто извлекет числовое значение 1 для каждой записи, которая соответствует вашим критериям. Надеюсь, это имеет смысл
3. Обратите внимание, что стоимость запроса одинакова, и не будет иметь значения, что вы используете.. Count(1) — это скрытое значение Count(*)
4. Я получил лучшую производительность, используя проекции. Подсчет (Projections.Id ()) вместо проекции. Количество строк()