Простой вопрос C # NHibernate - PullRequest
2 голосов
/ 21 марта 2011

Я использую NHibernate -приводное хранилище, Fluent сопоставления и пытаюсь использовать Linq to NHibernate.

Но для такого простого запроса, как этот

Retrieve<XValue>(x => (x.Timestamp.CompareTo(start) >= 0 &&
                       x.Timestamp.CompareTo(end) <= 0 ));

// 'Retrieve' here acts simply as 'session.Query<T>().Where(expression);'

Я получаю следующий результат:

System.NotSupportedException: Int32 CompareTo(System.DateTime)

Я не знаю почему, но CompareTo операции не проецируются в базу данных, и вывод также выглядит довольно странно:

create table "QuotUnitDescriptor" (
    Id  integer,
   PaperId INTEGER,
   Timestamp DATETIME,
   InPaperIdx INTEGER,
   primary key (Id)
)

NHibernate: INSERT INTO "QuotUnitDescriptor" ......................

// Many INSERT's

NHibernate: select cast(count(*) as INTEGER) as col_0_0_ 
    from "QuotUnitDescriptor" binaryunit0_

Я не могу понять, почему эта операция вызывает операцию select -> integer.

Как должен быть реализован следующий ориентированный на дату запрос? (лучше использовать Linq, но я думаю, что критерии тоже хороши).

1 Ответ

5 голосов
/ 21 марта 2011

Провайдер NHibernate.Linq не может преобразовать CompareTo вызов sql.

Используйте что-то вроде:

Retrieve<XValue>(x => x.Timestamp>start && x.Timestamp<end);

P.s. и избегать хранилищ. Это наивная абстракция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...