2011-08-14 57 views
3

我有两个类子查询问题

由名称:人与资产

由关系型:一对多(一人由许多资产)

我写了一个查询通过使用子查询linq.Nhibernate 2.2

var sub_q = from Asset a in SessionInstance.Linq<Asset>()       
      select a.Person.Id;    

var q = from Person p in SessionInstance.Linq<Person>() 
     where(sub_q.Contains(p.Id)) 
     select p;     

List<Person> list = q.ToList<Person>(); 

我看到在执行时间一个异常 例外的信息是:代码应该不可达

当然下面的查询是正确

var sub_q = from Asset a in SessionInstance.Linq<Asset>()       
      select a.Person.Id; 
List<Person> personList = sub_qsub_q.ToList<Person>; 
var q = from Person p in SessionInstance.Linq<Person>() 
     where (personList.Contains(p.Id)) 
     select p;     

List<Person> list = q.ToList<Person>(); 

但不适合性能

+3

有为什么要使用NHibernate 2特别的理由。 x而不是3.x? 3.x中的LINQ提供程序比2.x中的更强大 –

回答

0

好还是做

var q= (from Asset a in SessionInstance.Linq<Asset>()       
     select a.Person).ToList(); 
+0

我测试您的代码 但是问题没有解决 – Ehsan