如何在NHibernate中使用外键的表引用属性来过滤结果

时间:2017-01-23 10:11:34

标签: nhibernate

我正在使用NHibernate从SQL Server获取数据。

获取我写的数据var result = Repository.QueryOver<table_reference>().Where(c => c.Amount >100).List()

现在我希望通过类似

的外键引用来过滤结果
Repository.QueryOver<TaxInvoicePassing>().Where(c => c.Branch.Employee.Salary > 10000).List()

我怎样才能做到这一点?

一种方法是迭代每个表的记录,然后添加结果范围

提前致谢

1 个答案:

答案 0 :(得分:2)

使用QueryOver,您可以尝试:

// declare the alias
Branch branch = null;
Employee employee = null;

Session.QueryOver<TaxInvoicePassing>() // get a queryOver of TaxInvoicePassing
       .JoinAlias(t => t.Branch, () => branch) // add a join with Branch
       .JoinAlias(() => branch.Employee, () => employee) // add a join with Employee
       .Where(c => employee.Salary > 10000) // add where filter on employee's salary
       .List();

使用Linq,可以像你问的那样表达:

Session.Query<TaxInvoicePassing>()
       .Where(c => c.Branch.Employee.Salary > 10000) // this expression will be converted on a join
       .List();

我会将这些查询移到存储库对象中而不是暴露它。