使用NHibernate和LINQ过滤急切加载中的导航特性

使用NHibernate和LINQ过滤急切加载中的导航特性,nhibernate,linq-to-entities,Nhibernate,Linq To Entities,我在EF中使用这个 var users = Context.CreateSet<User>() .Select(u => new { User = u, Salary = u.Salaries.Where(s => !s.Deleted) })

我在EF中使用这个

 var users = Context.CreateSet<User>()
             .Select(u => new {
                               User = u,
                               Salary = u.Salaries.Where(s => !s.Deleted)
                              })
                              .AsEnumerable()
                              .Select(a => a.User);
var users=Context.CreateSet()
.选择(u=>new{
用户=u,
薪金=美国薪金。其中(s=>!s.已删除)
})
.可计算的()
.选择(a=>a.User);

在NHibernate中有一种Linq方法可以做到这一点,我希望它也能通过延迟加载来加载导航属性

NHibernate不会以这种方式用过滤结果填充集合,这不是一个好主意,因为您会得到一个损坏的模型。我看到的最好的选择

var users = session.Query<User>()
    .Fetch(u => u.Salaries)
    .Select(u => new
    {
        User = u,
        ActiveSalaries = u.Salaries.Where(s => !s.Deleted)
    });
var users=session.Query()
.Fetch(u=>u.palaries)
.选择(u=>new
{
用户=u,
活动工资=美国工资。其中(s=>!s.Deleted)
});

公共虚拟IEnumerable
{
获取{返回工资。其中(s=>!s.Deleted);}
}
var users=session.Query()
.Fetch(u=>u.palaries)

//ctor
活动工资=工资。其中(s=>!s.Deleted);
//财产
公共虚拟IEnumerable{get;私有集;}
//映射与工资映射几乎相同
HasMany(x=>x.ActiveSalaries)。表(“Salaries”)。其中(“Deleted=0”);
var users=session.Query()
.Fetch(u=>u.Fetch);
public virtual IEnumerable<Salary> ActiveSalaries
{
    get { return Salaries.Where(s => !s.Deleted); }
}

var users = session.Query<User>()
    .Fetch(u => u.Salaries)
// ctor
ActiveSalaries = Salaries.Where(s => !s.Deleted);

// property
public virtual IEnumerable<Salary> ActiveSalaries { get; private set; }


// mapping almost same as that of Salaries
HasMany(x => x.ActiveSalaries).Table("Salaries").Where("Deleted=0");

var users = session.Query<User>()
    .Fetch(u => u.ActiveSalaries);