Я использую Fluent NHibernate (1.2.0.712) и Nhibernate.Linq (версия 1) с SQLite (1.0.79)
Вот моя модель:
public class QueueItem
{
public virtual long ID { get; set; }
public virtual DateTime AddedToQueue { get; set; }
public virtual DateTime DontProcessUntil { get; set; }
public virtual DataQueueItemState State { get; set; }
}
Примечаниечто идентификатор длинный.У меня также есть этот бит LINQ:
var nextID =
from i in _repository
where i.State == DataQueueItemState.GetDataQueue && i.DontProcessUntil < DateTime.UtcNow
group i by i.State into g
select new { ID = g.Min(i => i.ID) };
_repository - хранилище уровня данных, реализующее IQueryable.
Этот запрос работает нормально.Однако, когда я посмотрел на сгенерированный SQL, я увидел следующее:
NHibernate: select cast(min(queueitem0_.ID) as INTEGER) as col_0_0_ from "QueueItem"
queueitem0_ where queueitem0_.State=@p0 and queueitem0_.DontProcessUntil<@p1 group by
queueitem0_.State;@p0 = 'GetDataQueue' [Type: String (0)], @p1 = 28/03/2012 08:21:10
[Type: DateTime (0)]
Вопрос в том;почему ID передается в INTEGER?На самом деле, почему он вообще приводится?
На стороне кода g.Min (i => i.ID) знает, что он возвращает long.Создается новый анонимный тип для хранения результата, и если я использую .elementAt (0) .ID для него, он также дает мне long, так что все выглядит нормально.