C# 用ICriterion筛选NHibernate亚型
在我访问数据库之前,是否有任何方法可以通过向执行的DetachedCriteria添加ICriterion来过滤子类型字段上的NHibernate查询 我的代码如下所示:C# 用ICriterion筛选NHibernate亚型,c#,nhibernate,icriteria,detachedcriteria,C#,Nhibernate,Icriteria,Detachedcriteria,在我访问数据库之前,是否有任何方法可以通过向执行的DetachedCriteria添加ICriterion来过滤子类型字段上的NHibernate查询 我的代码如下所示: DetachedCriteria detachedCriteria = DetachedCriteria.For(typeof(MyObject)); ProjectionList projectionList = Projections.ProjectionList(); projectionList.Ad
DetachedCriteria detachedCriteria = DetachedCriteria.For(typeof(MyObject));
ProjectionList projectionList = Projections.ProjectionList();
projectionList.Add(Projections.SqlProjection("{alias}.SubType as SubType", new string[] { "SubType" }, new IType[] { TypeFactory.GetAnsiStringType(15) }));
dc.SetProjection(projectionList);
dc.Add(Expression.Eq("SubType", "MYOBJECT"));
using(ISession session = ...)
{
ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);
// Blows up because I don't know how to reference the SubType
// field with an ICriterion (Expression.Eq("SubType", "MYOBJECT"))
IList list = criteria.List();
...
}
虽然这可能不是实现我的目标的正确方法,但我希望这至少是可能的,因为我不希望必须重构期望/产生ICriterion的接口。我也不必访问需要创建ICriterion对象附近的会话(但我完全可以控制将要使用的各种NHibernate字段/表的别名/命名)。花了相当多的时间在谷歌上寻找答案,这里是:
我需要这样的东西!非常感谢。在我的例子中,我需要一个列来容纳1到一个特定类型,2到另一个!结果如下:var productTypeConditional=Projections.Conditional(Restrictions.Eq(“class”),typeof(冰箱)),Projections.Constant(ProductType.冰箱),Projections.Constant(ProductType.Piece));
ICriteria crit = sess.CreateCriteria(typeof(Mammal));
crit.Add( Expression.Not( Expression.Eq("class", typeof(DomesticCat)) ) );
List mammals = crit.List();