我在Ektron 9.0工作。
我有两个不同的自定义属性与Ektron中的分类法相关联。
Say,Taxonomy名为“P”,它有两个自定义属性,
* P1 * P2
每个自定义属性都有自己的值。
(例如: * P1 - V1 * P2 -V2)
现在我试图根据这些自定义属性的名称和值来提取Ektron中的所有分类法。
即,获取Ektron中的所有分类,其中自定义属性名称为P1,对应值为V1,另一个自定义属性名称为P2,对应值为V2。
代码:
CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp1= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo,"P1");
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Value,
CriteriaFilterOperator.EqualTo, "V1");
criteriaFilterGrp1.Condition = LogicalOperation.And;
custCtriteria.FilterGroups.Add(criteriaFilterGrp1);
CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp2= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo, "P2";
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Value,
CriteriaFilterOperator.EqualTo, "V2");
custCtriteria.FilterGroups.Add(criteriaFilterGrp2);
这里,当我按两个分类名称及其对应的值添加过滤条件时,如下所示, 我没有得到任何结果,因为它正在寻找满足我所给出的所有四个条件的分类法自定义属性。
我该如何解决这个问题?
答案 0 :(得分:1)
我的猜测是底层代码的行为与预期的操作方式不同 - 不是处理具有自定义属性的分类项,而是处理属性本身。这与其他ektron API在键入方面的行为一致,但不一致在于它返回相关的分类项本身(尽管这显然是更理想的结果)。对于此设计,您无法检索名称等于p1 和 p2的自定义属性。
解决方案是为每个要独立过滤的属性检索列表,然后将这些列表相交。方便的是,ektron返回iQueryable列表,因此您可以使用linq轻松完成此操作:
CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp1= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo,"P1");
criteriaFilterGrp1.AddFilter(TaxonomyCustomProperty.Value,
CriteriaFilterOperator.EqualTo, "V1");
criteriaFilterGrp1.Condition = LogicalOperation.And;
custCtriteria.FilterGroups.Add(criteriaFilterGrp1);
var itemsWithProp1= taxManager.getList(custCtriteria);
custCtriteria = new criteria();
CriteriaFilterGroup<TaxonomyCustomProperty> criteriaFilterGrp2= new CriteriaFilterGroup<TaxonomyCustomProperty>();
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Name,
CriteriaFilterOperator.EqualTo, "P2";
criteriaFilterGrp2.AddFilter(TaxonomyCustomProperty.Value,
CriteriaFilterOperator.EqualTo, "V2");
custCtriteria.FilterGroups.Add(criteriaFilterGrp2);
var itemsWithProp2 = taxManager.getList(custCtriteria);
var itemsWithBoth = itemsWithProp1.Intersect(itemsWithProp2);
虽然这不是最优雅或最有效的解决方案,但我不确定在制作自定义SQL查询之外,Ektron的API中有更好的方法。