CustommetakeyCriteria

use*_*602 3 tridion tridion-content-delivery tridion-2011

我们使用Filter Criteria来从存储数据库(SQL Server)中检索值.

为了检索StartDate和EndDate的各种Event Component基础,我们编写了下面提到的代码.

ItemSchemaCriteria isEvent= new ItemSchemaCriteria(SchemaID);
Query query= new Query();

Criteria mainCriteria;
mainCriteria = CriteriaFactory.And(isEvent, isEvent);

DateTime lowerDate = DateTime.Now;
DateTime lower;
string lowerDateString=lowerDate.ToString("yyyy-MM-dd HH:mm:ss.000");
lower=Convert.ToDateTime(lowerDateString);

CustomMetaKeyCriteria dateKeyCriteria = new CustomMetaKeyCriteria("EventStartDate",Criteria.GreaterThanOrEqual);
CustomMetaValueCriteria dateValueCriteria = new CustomMetaValueCriteria(dateKeyCriteria,lower);
CustomMetaKeyCriteria dateEndKeyCriteria = new CustomMetaKeyCriteria("EventEndDate",Criteria.GreaterThanOrEqual);
CustomMetaValueCriteria dateEndValueCriteria = new CustomMetaValueCriteria(dateEndKeyCriteria,lowerDate);
Criteria OrCriteria=CriteriaFactory.Or(dateValueCriteria,dateEndValueCriteria);
mainCriteria = CriteriaFactory.And(mainCriteria,OrCriteria);
Run Code Online (Sandbox Code Playgroud)

当我们指定确切的日期和时间(2012-10-30 16:00:00.000)时,上面的代码给了我们一些记录.但是当我们尝试提供Fromdate和ToDate(10天跨度)时,即使我们在数据库中有一些记录,也不会返回任何记录.我们在指定dateKeyCriteria时是否有任何错误,它会返回指定的EventStartDate和EventEndDate之间的所有事件?

Dan*_*agu 5

您应该知道构建查询的逻辑并不正确,但无论如何您还可以使用另一种选择(更加优化):CustomMetaDateRangeCriteria.您有一些构造函数允许您指定beginRange,endRange,format(如果您的日期不是DateTime格式),请包含beginDate/endDate.这是一个例子:

CustomMetaDateRangeCriteria dateRangeCriteria = new CustomMetaKeyCriteria("MyMetaDate", myStartDate, myEndDate, true);
Run Code Online (Sandbox Code Playgroud)

如果这个构造函数不适合你,你也可以尝试另一个构造函数: CustomMetaDateRangeCriteria(string fieldName, string dateformat, string beginRange, string endRange, bool rangeIncluded).

希望这可以帮助.