在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
提前致谢!
答案 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
我现在可以安息吧:)。