Nhibernate 无法确定如何在IQueryable中执行联接

Nhibernate 无法确定如何在IQueryable中执行联接,nhibernate,Nhibernate,以下是我正在尝试的: IQueryable query = this.MyRepository.GetShippingCollection(); IList<SomeListType> myList = query.Where(x => x.Settings .Where(y => y.SelectorID.Equals(5))

以下是我正在尝试的:

IQueryable query = this.MyRepository.GetShippingCollection();

IList<SomeListType> myList = query.Where(x => x.Settings
                                      .Where(y => y.SelectorID.Equals(5))
                                      .Count() > 0)
                                   .OrderBy(x => x.Order)
                                   .ToList();
IQueryable query=this.MyRepository.GetShippingCollection();
IList myList=query.Where(x=>x.Settings
其中(y=>y.SelectorID.Equals(5))
.Count()>0)
.OrderBy(x=>x.Order)
.ToList();
产生以下错误: 无法解析属性:Settings.ID

如果我这样做,它会工作,但会在我的SQL Server上引发3000多个查询:

IList<SomeListType> myList = this.MyRepository.GetShippingCollection().ToList();
myList = myList.Where(x => x.Settings
                        .Where(y => y.SelectorID.Equals(5))
                        .Count() > 0)
               .OrderBy(x => x.Order)
               .ToList();
IList myList=this.MyRepository.GetShippingCollection().ToList();
myList=myList.Where(x=>x.Settings
其中(y=>y.SelectorID.Equals(5))
.Count()>0)
.OrderBy(x=>x.Order)
.ToList();
我知道解决方案就在于使用“连接”

在过去的几个小时里,我一直在看示例,只能在映射文件中找到连接示例。我也在寻找“ICriteria”的例子

我不想为映射文件中的所有复杂查询创建seporate条目,这样该文件中的连接就无法工作

因为我使用的是Fluent NHibernate,所以我没有使用“ICriteria”。我用的是“IQueryable”。如何在“IQueryable”中联接多个表

在此方面的任何帮助都将不胜感激。
提前感谢。

如果第二个查询正在执行3000个查询,那么加载
设置
集合几乎肯定是惰性的。在遍历列表时,访问此集合,每次NHibernate返回数据库获取它时尝试将Settings属性的获取模式设置为映射中的即时加载。

除此之外,LINQ提供者可能是一个问题。您使用的是什么版本的NHibernate?2.x LINQ提供程序有一些实际的限制。它已在3.0主干中重新实现,但您必须从源代码处下载并编译它


顺便说一句,ICriteria vs IQueryable与流利的NHibernate没有关系。CriteriaAPI和LINQ是两个提供程序,您可以通过它们创建查询。Fluent NHibernate是执行配置的另一种方式。

如果第二个查询执行3000个查询,则几乎可以肯定加载
设置
集合是惰性的。在遍历列表时,访问此集合,每次NHibernate返回数据库获取它时尝试将Settings属性的获取模式设置为映射中的即时加载。

除此之外,LINQ提供者可能是一个问题。您使用的是什么版本的NHibernate?2.x LINQ提供程序有一些实际的限制。它已在3.0主干中重新实现,但您必须从源代码处下载并编译它


顺便说一句,ICriteria vs IQueryable与流利的NHibernate没有关系。CriteriaAPI和LINQ是两个提供程序,您可以通过它们创建查询。Fluent NHibernate是执行配置的另一种方式。

NHibernate linq提供程序可能还不支持此功能(不确定)。我可能会使用一个标准来代替。nhibernate linq提供程序可能还不支持这一点(不确定)。我可能会使用一个标准来代替。这只是管理员中单个页面上的一个问题。谢谢你的建议,在大多数情况下,这是正确的选择。不幸的是,在我的情况下,它导致了更多的问题,然后它解决了。这会导致我的其他页面从SQL server中提取太多数据。这很糟糕,因为SQL不是本地主机。我已经找到了我必须做的事情。我需要使用ICriteria,我使用的项目中设置Fluent-NHibernate的方式没有声明,因此我无法轻松使用它。我正在将其添加为一个选项。谢谢你的建议。@Michael对不起,我不清楚。我的意思是将其设置为“急切加载”,作为识别问题的一种方法。如果这是可行的,那么不,你不想总是急于加载,只有当你需要它的时候。您可以基于每个查询指定获取模式,但我不清楚为什么不能使用CriteriaAPI。这与FNH无关。如果您有一个
ISession
来执行LINQ查询,您可以执行条件查询。我选择这个作为答案,因为急切加载解决了大约2/3的问题。ICriteria不可用,因为它未列在自定义NHibernate界面中。我将它添加到定制的NHibernate接口中,该选项变得可用。我完全可以通过使用iCiteria解决这个问题。谢谢你给我的想法,让我从不同的角度来看待它。这只是一个问题,在一个单一的页面内的管理。谢谢你的建议,在大多数情况下,这是正确的选择。不幸的是,在我的情况下,它导致了更多的问题,然后它解决了。这会导致我的其他页面从SQL server中提取太多数据。这很糟糕,因为SQL不是本地主机。我已经找到了我必须做的事情。我需要使用ICriteria,我使用的项目中设置Fluent-NHibernate的方式没有声明,因此我无法轻松使用它。我正在将其添加为一个选项。谢谢你的建议。@Michael对不起,我不清楚。我的意思是将其设置为“急切加载”,作为识别问题的一种方法。如果这是可行的,那么不,你不想总是急于加载,只有当你需要它的时候。您可以基于每个查询指定获取模式,但我不清楚为什么不能使用CriteriaAPI。这与FNH无关。如果您有一个
ISession
来执行LINQ查询,您可以执行条件查询。我选择这个作为答案,因为急切加载解决了大约2/3的问题。ICriteria不可用,因为它未列在自定义NHibernate界面中。我将它添加到定制的NHibernate接口中,该选项变得可用。我完全可以通过使用iCiteria解决这个问题。Tha