我有一个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的问题还是我做错了什么?
答案 0 :(得分:0)
我不知道这是否有效,但值得一试:
Session.Linq<Meeting>().OrderByDescending(x => x.DateOfMeeting).Distinct();
答案 1 :(得分:0)
我正在尝试做同样的事情。
我尝试在我的映射中使用一个公式,当我可以限制返回的行没有top 1或rownum = 1时(如果行中的列的状态可以使用:如何,HasMeetingOccured = null,但显然对于这种无效的情况。)
对我来说 - Oracle抛出了语法 - 无论出于什么原因它不喜欢子查询中的rownum限制 - 它以某种方式打破了语法。
我没有尝试过使用linq提供程序,也不知道如何在critiera API中执行此操作..但是,Single()或Take(1)是否有效?