NHibernate: выбор топ 1 упорядочен по дате в дочерней коллекции для каждого родителя - PullRequest
0 голосов
/ 18 мая 2011

У меня есть класс Client и класс Meeting, я пытаюсь получить все последующие собрания для каждого клиента.Таким образом, я получу по одному собранию на каждого клиента.

Я получаю запрос, подобный этому:

var qry = from client in session.Query<Client>()
          select new
          {
              c = client,
              e = client.Meetings.OrderBy(x => x.Date).First()
          };

Сгенерированный sql:

select
    client0_.ClientId as col_0_0_,
    (select 
        meetings1_.EventId 
    from
        Event meetings1_ 
    where
        client0_.ClientId=meetings1_.ClientId
    order by
        meetings1_.Date asc) as col_1_0_,
    client0_.ClientId as ClientId13_,
    client0_.ContactName as ContactN2_13_,
    client0_.ClientStatus as ClientSt3_13_,
    client0_.HomePhoneNumber as HomePhon4_13_,
    client0_.FaxNumber as FaxNumber13_,
    client0_.WorkPhoneNumber as WorkPhon6_13_,
from
    Client client0_

Я ожидаю, что подзапрос будет иметь топ-1, но это не так, это проблема с Linq для NHibernate или я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Я пытаюсь сделать ОЧЕНЬ одно и то же.

Я попытался использовать формулу в своем отображении, и это работает, когда я могу ограничить строки, возвращаемые без верхней 1 или где rownum = 1 (например, если можно использовать состояние столбца в строке:WHERE HasMeetingOccured = null, но, очевидно, для этой ситуации это не сработает.)

Для меня - Oracle выбрасывает синтаксис - по какой-то причине ему не нравится ограничение rownum в подзапросе - оно ломаетсякак-то синтаксис.

Я не пробовал использовать для этого провайдера linq, и я не знаю, как это сделать в API-интерфейсе критериев ... однако работает ли Single () или Take (1)?

0 голосов
/ 18 мая 2011

Я не знаю, сработает ли это, но стоит попробовать:

Session.Linq<Meeting>().OrderByDescending(x => x.DateOfMeeting).Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...