Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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# 如何在hibernate条件中将表自身连接几次?_C#_Hibernate_Join_Nhibernate Criteria_Icriteria - Fatal编程技术网

C# 如何在hibernate条件中将表自身连接几次?

C# 如何在hibernate条件中将表自身连接几次?,c#,hibernate,join,nhibernate-criteria,icriteria,C#,Hibernate,Join,Nhibernate Criteria,Icriteria,我有一些实体的本质。它有很多属性(超过一百个)。我需要做些什么。过滤器的计数是无限的,一个属性可以有一些过滤器(例如“年龄>20和年龄

我有一些实体的本质。它有很多属性(超过一百个)。我需要做些什么。过滤器的计数是无限的,一个属性可以有一些过滤器(例如“年龄>20和年龄<50”)。问题是,在hibernate标准中,我不能任意多次附加属性表。第一次加入实体字段时,第二次无法使用此字段

创建标准:

var attributeType = typeof(Attribute);
var criteria = tr.CreateCriteria(attributeType, "ATTRIBUTE");
criteria
    .CreateAlias("Essence", "ESSENCE", NHibernate.SqlCommand.JoinType.RightOuterJoin)
    .CreateAlias("SomeModel", "SOME_MODEL", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .Add(Restrictions.And(
        Restrictions.Eq("SOME_MODEL.Code", someCode),
        Restrictions.IsNull("ESSENCE.SomeParameter")));
...
这里需要属性对其进行排序

for (int i = 0; i < filters.Count; i++)
{
    string attributeColumnName = "ATTRIBUTE_" + i.ToString();
    criteria
        .CreateAlias("Essence.EssenceAttribute", 
            attributeColumnName,
            NHibernate.SqlCommand.JoinType.LeftOuterJoin,
            Restrictions.EqProperty("ESSENCE.Id", attributeColumnName + ".EssenceId"))
        .Add(Restrictions.Eq(
            attributeColumnName + ".AttributeId",
            (long)filters[i].AttributeId))
        .Add(Restrictions.Eq(
            attributeColumnName + ".Value",
            filters[i].Value));
}
for(int i=0;i
当过滤器只有一个过滤器时,一切正常。若过滤器有两个,我将捕获错误(类似于“使用Essence.EssenceAttribute复制”)。我怎么能做到