Как заказать свойство дочерней коллекции в NHibernate 3 с помощью провайдера Linq? - PullRequest
3 голосов
/ 15 марта 2011

Я пытаюсь создать запрос, который упорядочен по свойству дочерней коллекции.В SQL это довольно просто:

Select Table1.*
From Table1
Inner join Table2 on Table1.Id = Table2.Table1Id
OrderBy Table1.Column1, Table2.Column1

Вот как я это сделал в NHibernate 2, и он работал нормально:

var result = Session.Linq<Table1>()
                 .OrderBy(x => x.Column1)
                     .ThenBy(x => x.Table2.FirstOrDefault().Column1);

После перехода на NHibernate 3 это больше не работает,Выдает NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: Antlr.Runtime.NoViableAltException.

Я использую NHibernate 3.1.Есть ли другие решения для такого запроса?

1 Ответ

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

Два запроса не совпадают.Версия 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

РЕДАКТИРОВАТЬ

Если вы хотите скопировать исходный 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...