Linq到NHibernate中的子查询
我在NHibernate 3.1中有一个Linq的问题:Linq到NHibernate中的子查询,linq,nhibernate,subquery,linq-to-nhibernate,Linq,Nhibernate,Subquery,Linq To Nhibernate,我在NHibernate 3.1中有一个Linq的问题: public IList<Person> Search() { var sub_q = SessionInstance.Query<Person>().Where(x => x.Id < 6).Select(x => x.Id); var q = SessionInstance.Query<Person>(); q = q.Where(x => sub_
public IList<Person> Search()
{
var sub_q = SessionInstance.Query<Person>().Where(x => x.Id < 6).Select(x => x.Id);
var q = SessionInstance.Query<Person>();
q = q.Where(x => sub_q.Contains(x.Id));
return q.ToList<Person>();
}
为什么?在sub\u q上应用ToList方法可能会解决您的问题,因为可能存在执行不同linq的问题 代码就像
var sub_q = SessionInstance.Query<Person>()
.Where(x => x.Id < 6).Select(x => x.Id).ToList();
var q = SessionInstance.Query<Person>();
q = q.Where(x => sub_q.Contains(x.Id));
var sub_q=SessionInstance.Query()
.Where(x=>x.Id<6).选择(x=>x.Id).ToList();
var q=SessionInstance.Query();
q=q,其中(x=>sub_q.包含(x.Id));
或您可以尝试
q = q.Where(x => (SessionInstance.Query<Person>()
.Where(x => x.Id < 6).Select(x => x.Id)).Contains(x.Id));
q=q.Where(x=>(SessionInstance.Query()
。其中(x=>x.Id<6)。选择(x=>x.Id))。包含(x.Id));
关于第二个解决方案,我不太清楚
但我认为您必须执行
ToList()
来解决不同执行的问题 通过将sub_q中的x
变量重命名为xx
var sub_q = SessionInstance.Query<Person>().Where(xx => xx.Id < 6).Select(xx => xx.Id);
var sub_q = SessionInstance.Query<Person>().Where(xx => xx.Id < 6).Select(xx => xx.Id);
var sub_q=SessionInstance.Query()。其中(xx=>xx.Id<6)。选择(xx=>xx.Id);
子查询中的
x
被查询中的x
覆盖。通过更改它的名称,我的问题就解决了。它不适合性能。这不是子查询。对于您的解决方案,子查询是一个列表,所以不要使用from子查询,它可以100%工作。性能对我来说很重要。您是否在v3.2甚至主干上尝试过这一点,因为Linq提供程序从v3.1开始就一直在使用?这可能是已修复的旧错误。