mar*_*sks 3 .net c# nhibernate
我正在尝试按子集合的属性创建查询.在SQL中很容易:
Select Table1.*
From Table1
Inner join Table2 on Table1.Id = Table2.Table1Id
OrderBy Table1.Column1, Table2.Column1
Run Code Online (Sandbox Code Playgroud)
这是我在NHibernate 2中的表现,它工作得很好:
var result = Session.Linq<Table1>()
.OrderBy(x => x.Column1)
.ThenBy(x => x.Table2.FirstOrDefault().Column1);
Run Code Online (Sandbox Code Playgroud)
迁移到NHibernate 3后,这不再起作用了.它抛出NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:Antlr.Runtime.NoViableAltException.
我正在使用NHibernate 3.1.这种查询还有其他解决方案吗?
这两个查询不一样.LINQ版本(大致)等同于:
SELECT Table1.*
FROM Table1
INNER JOIN (SELECT TOP 1 * FROM Table2 WHERE Table2.Table1ID = Table1.Id) AS FirstTable2
ORDER BY Table1.Colum1, FirstTable2.Table2
Run Code Online (Sandbox Code Playgroud)
编辑
如果你想复制原始的sql,你可能需要这样的东西:
Session.Linq<Table1>()
.SelectMany(t1 => t1.Table2, (t1,t2) => new { t1, t2 })
.OrderBy(t1t2 => t1t2.t1.Column1)
.ThenBy(t1t2 => t1t2.t2.Column2)
.Select(t1t2 => t1)
Run Code Online (Sandbox Code Playgroud)