Linq-to-NHibernate - 如何使用SelectMany进行加入

时间:2014-05-22 15:17:10

标签: sql nhibernate linq-to-nhibernate

在Linq-to-NHibernate中是否可以在同一个查询中与SelectMany进行连接?

可能看起来很奇怪,但想法是生成以下查询:

select * from State
join (
select CityId, StateId 
from State 
inner join City on State.StateId=City.StateId
) as City on City.StateId = State.StateId

原因是我们正在使用存储库模式,我不想使用2个不同的存储库来进行连接。

在代码中,我尝试了以下块,但是我得到了一个不支持的异常

var states = Session.Query<State>();

var query = states.Join(states.SelectMany(x => x.Cities), state => state.StateId,
city => city.State.StateId, (state, city) => new {state, city});

var result = query.ToArray(); // <- Throws a not supported exception

我在两个存储库中尝试了同样的事情并且它有效:

var states = Session.Query<State>();
var cities = Session.Query<City>();

var query = states.Join(cities , state => state.StateId,
city => city.State.StateId, (state, city) => new {state, city});

var result = query.ToArray(); // <- This works perfectly fine

提前致谢!

1 个答案:

答案 0 :(得分:0)

啊!我发现我没有想到正确的方法。我可以从SelectMany开始,然后选择两者。

这是支持的,它将与连接做同样的事情,但更加优化:

var states = Session.Query<State>();

var query = states.SelectMany(x => x.Cities).Select(city => new {city.State, city});

var result = query.ToArray(); // It works!

有了这个,我甚至不需要获得City的回购:D

我现在可以安息吧:)。