Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ至NHibernate can';不要接触儿童';孩子们_Linq_Nhibernate_Fluent Nhibernate_Mappings - Fatal编程技术网

LINQ至NHibernate can';不要接触儿童';孩子们

LINQ至NHibernate can';不要接触儿童';孩子们,linq,nhibernate,fluent-nhibernate,mappings,Linq,Nhibernate,Fluent Nhibernate,Mappings,我有一个实体A,它的IList为B,称为Bs,B的IList为C,称为Cs 我想搜索所有至少有5个C的A。所以我去写了 using (var s = this._sessionFactory.OpenSession()) { IQueryable<A> q = s.Linq<A>(); // some code... if (range.Min.HasValue) q = q.Where(a

我有一个实体A,它的IList为B,称为Bs,B的IList为C,称为Cs

我想搜索所有至少有5个C的A。所以我去写了

using (var s = this._sessionFactory.OpenSession())
{
    IQueryable<A> q = s.Linq<A>();
    // some code...
    if (range.Min.HasValue)                    
        q = q.Where(a => a.Bs.Sum(b => b.Cs.Count) >= range.Min.Value);
    // some code...
    return q.Select(b=>b).ToArray();
 }
B上的地图上写着:

//...
HasMany(b => b.Cs)
 .Table("Cs")
 .KeyColumn("IdB")
 .Cascade.AllDeleteOrphan()
 .Inverse()
 .Not.LazyLoad();
References(b => b.A, "IdA")
 .Not.LazyLoad();
//...
最后,关于C上的映射:

References(c => c.B, "IdB").Not.LazyLoad();

LINQ to NHibernate对于简化查询非常有用。然而,当您需要执行复杂的查询时(比如这个),最好切换到CriteriaAPI或HQL。您有3种查询方法可供使用,请全部使用


也就是说,一旦发布了NHibernate 3.0,就可以使用LINQ执行此查询。

使用LINQ到NHibernate 2.x无法执行此查询。

您可能需要在NHibernate主干中尝试较新的LINQ提供程序。NHContrib Linq提供程序的功能更为有限。我从NHibernate主干中获得了最新的Linq提供程序,但它并没有解决我的问题:(((())因此我知道,对于NHibernate的最新发布的Linq提供程序,这是不可能的。。
References(c => c.B, "IdB").Not.LazyLoad();