NHibernate: подсчет строк / результатов: проекция.Количество строк() ПРОТИВ Проекции.Count()

#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 ()) вместо проекции. Количество строк()