我的实体包含以下内容:
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?