Pie*_*rOz 5 .net c# nhibernate
我正在使用NHibernate,我有两个映射我的DataBase模式的类:
public class A
{
public virtual int Id { get; set;}
public virtual List<B> MyList { get; set; }
}
public class B
{
public virtual int Id { get; set; }
public virtual DateTime Date { get; set; }
public virtual A FKtoA { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想得到表A的所有条目,它们的MyList属性的所有元素都具有小于给定值的Date.
我怎么能用优雅的NHibernate语法做到这一点?
我欠你“优雅”的部分......:-)
这是一个可能的 HQL。请注意,颠倒了您的条件:我不是寻找“其 MyList 属性的所有元素的日期小于给定值的 A”,而是寻找“其 MyList 属性的任何元素的日期都小于给定值的 A”大于或等于给定值”。
from A a
where a not in
(select a1
from A a1, B b
where b.Date >= :date
and b in elements(a1.MyList))
Run Code Online (Sandbox Code Playgroud)
用法:
var results = session.CreateQuery("hql from above")
.SetParameter("date", DateTime.Today)
.List();
Run Code Online (Sandbox Code Playgroud)
A请注意,如果您声明和之间的双向关系B(通过添加A属性),则查询会简单得多:
from A a
where a not in
(select b.A
from B b
where b.Date >= :date)
Run Code Online (Sandbox Code Playgroud)
更新:以下是使用 Criteria 的方法:
session.CreateCriteria<A>().Add(
Subqueries.PropertyNotIn("id",
DetachedCriteria.For<A>()
.CreateCriteria("MyList")
.SetProjection(Projections.Property("id"))
.Add(Restrictions.Ge("Date", DateTime.Today))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4487 次 |
| 最近记录: |