2

我在 Ektron 9.0 中工作。

我有两个与 Ektron 中的分类相关的不同自定义属性。

比如说,分类法称为“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);

在这里,当我通过两个分类名称及其对应值添加过滤条件时,如下所示,我没有得到任何结果,因为它正在寻找满足我给出的所有四个条件的分类自定义属性。

我该如何解决这个问题?

4

1 回答 1

1

我的猜测是,底层代码的行为与预期的操作方式不同——它不是处理具有自定义属性的分类项目,而是处理属性本身。这与其他 ektron API 在其类型方面的行为一致,但不一致的是它返回相关的分类项目本身(尽管这显然是更理想的结果)。对于这种设计,您无法检索名称等于 p1p2 的自定义属性是有道理的。

解决方案是检索要独立过滤的每个属性的列表,然后与这些列表相交。方便的是,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);

虽然这不是最优雅或最有效的解决方案,但我不确定 Ektron 的 API 中是否有更好的方法,除了制作自定义 SQL 查询。

于 2013-08-21T15:35:59.120 回答