Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用ICriterion筛选NHibernate亚型_C#_Nhibernate_Icriteria_Detachedcriteria - Fatal编程技术网

C# 用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添加ICriterion来过滤子类型字段上的NHibernate查询

我的代码如下所示:

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();