我已经用fluent nhibernate来挂钩一个商店和员工课程,商店可以有许多员工如下:

public class Store
{
    public virtual IList<Employee> Employees { get; set; }
    //other store properties
}

public class Employee
{
    public virtual Store Store { get; set; }   
    public virtual bool? SomeStatus1 { get; set; }
}
.

我需要获取所有没有someStatus1设置为true的商店。

我的Feable尝试失败了:

Session.CreateCriteria(typeof(Store))
    .Add(Restrictions.Not(Restrictions.Eq("Employees.SomeStatus1", true))
    .List<Store>();
.

任何想法我如何完成这一点?

我的尝试失败的原因是因为列表员工没有SomeStatus1的属性,这是相当明显的。

我不知道的是,如何让nibernate只能在我正在寻找的状态下有员工的商店...

我想我想要问nibernate是为了做一个加入......但我不知道如何要求它做...

有帮助吗?

解决方案

您通过创建子条件

var criteria = Session.CreateCriteria(typeof(Store));
var join = criteria.CreateCriteria("Employees");
join.Add(Restrictions.Not(Restrictions.Eq("SomeStatus1", true));
return criteria.List<Store>();
.

未经测试(vish)希望它有效,但你得到了这个想法。这就是我用n:1做的方式,但你有1:n

编辑:好的,发布后我做了一些研究。似乎我所做的代码应该工作,但会导致员工收集的加载。在 ayende的博客上找到相同的基本代码。那里有一个样本,没有导致收集被重新加载的情况。希望有所帮助。

其他提示

尝试:

Session.CreateCriteria(typeof(Store))
.CreateAlias("Employees", "e")
.Add(Restrictions.Not(Restrictions.Eq("e.SomeStatus1", true))
.List<Store>();
.

我建议您使用LINQ到NHibernate API而不是标准API。有了它,您的查询将如下:

var query = Session.Linq<Store>()
    .Where(store => store.SomeStatus1 != true);

var result = query.ToList();
.

更多帮助>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top