Можно ли сделать стандартное отклонение в NHibernate? - PullRequest
1 голос
/ 11 апреля 2009

Можно ли рассчитать стандартное отклонение с помощью NHibernate? Я использую Microsoft SQL Server 2005 Dialect.

Я не могу найти ни одного примера этого.

Пожалуйста, помогите.

спасибо!

Ответы [ 5 ]

2 голосов
/ 20 июня 2009

Просто хотел, чтобы все знали, как я это сделал, с помощью кода, который может помочь другим:

Когда я создаю свою SessionFactory, я просто добавляю пользовательскую функцию SQL в объект конфигурации:

Установка:

var configuration = new Configuration();
configuration.AddSqlFunction("stdev", new StandardSQLFunction("stdev", HibernateUtil.Double));

SessionFactory = configuration.Configure().BuildSessionFactory();

Usage:

Тогда в моем поставщике данных я теперь могу вызывать пользовательскую функцию:

ICriteria criteria = _session.CreateCriteria(typeof(ItemHistory));
criteria.SetProjection(Projections.SqlFunction("stdev", NHibernateUtil.Double, Projections.Property("Speed") ));
IList results = criteria.List();
1 голос
/ 11 апреля 2009

Я не очень знаком с NHibernate, но, используя Java Hibernate, вы можете легко создать подкласс существующего диалекта для добавления дополнительных функций. Нечто подобное может помочь вам (это версия Java):

public class MyDialect extends SQLServerDialect
{
    public MyDialect()
    {
        super();

        // register extra functions (may need to specify parameter types)
        registerFunction( "stdev", new StandardSQLFunction( "stdev" ) );
    }
}
1 голос
/ 12 апреля 2009

STDEV - это встроенная функция SQL для SQL Server ... вы можете пройти через собственный запрос?

0 голосов
/ 22 июля 2013

Я решил более стандартным способом с помощью этого кода:

sqrt((sum(value*value)/count(value)) - (avg(value) * avg(value)))

Другими словами, развертывание формулы стандартного отклонения с использованием других поддерживаемых агрегатных функций: сумма и число.

Я проверил по формуле 'std ()' в mysql, и это работает, за исключением младших разрядов (ошибка меньше 0,000000001D).

0 голосов
/ 11 апреля 2009

Вы можете использовать собственные запросы SQL, включая агрегатные функции, в HQL (Hibernate Query Language). См. Глава 12 в документации.

Отредактировано, чтобы добавить: я просто прочитал это сам, и STDEV не поддерживается. Альтернативой, которая может сработать, является создание представления, которое включает в себя вычисление, и сопоставление представления вместо таблицы. Далее Поиск в Google заставляет меня полагать, что документация может быть устаревшей или есть расширения для NHibernate, которые включают STDEV.

...