NHibernate从组中选择Top 1 / Max

时间:2013-04-28 12:20:17

标签: c# sql sql-server nhibernate sql-server-ce

我的实体包含以下内容:

Class Entity
{
    Guid GroupId;
    DateTime StartTime;
    String Name;
    String Type;
}

我需要获取其GroupId在特定输入列表中的所有记录,并且对于每个GroupId,我只想要具有最新StartTime(Max(StartTime))的记录。

我认为SQL应该是这样的:

SELECT *
FROM 
    (SELECT MAX(StartTime) AS time, GroupId 
     FROM Entity 
     WHERE GroupId IN (@1, @2...) 
     GROUP BY GroupId) A
JOIN Entity B
ON A.GroupId = B.GroupId
AND A.time = B.StartTime

我尝试使用Session.CreateQuery运行它,如下所示:

string query = string.Format(
                "FROM " +
                    "(SELECT MAX(StartTime) AS time, GroupId " +
                    "FROM Entity " +
                    "WHERE GroupId IN (:identifiers) " +
                    "GROUP BY GroupId) A " +
                 "JOIN Entity B " +
                 "ON A.GroupId=B.GroupId " +
                 "AND A.time = B.StartTime");



 IList<Entity> result = 
                Session.CreateQuery<Entity>().SetParameterList("identifiers", groupIds)            .List<Entity>();

我得到以下例外: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了类型'Antlr.Runtime.NoViableAltException'的异常。

目前我使用的是不支持CTE的SQL Server CE。 我怎样才能使用NHibernate来实现:CreateQuery / QueryOver / Criteria?

0 个答案:

没有答案