3

我们正在使用筛选条件从存储数据库 (SQL Server) 中检索值。

为了检索它们的 StartDate 和 EndDate 的各种事件组件库,我们编写了下面提到的代码。

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

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

4

2 回答 2

5

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

CustomMetaDateRangeCriteria dateRangeCriteria = new CustomMetaKeyCriteria("MyMetaDate", myStartDate, myEndDate, true);

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

希望这可以帮助。

于 2012-10-22T14:00:48.333 回答
2

如果它可以提供帮助,这里有一个关于如何使用 CustomMetaDateRangeCriteria 的完整工作示例,请注意 cbo 是一个列表,用户可以在其中选择格式为“YYYY”的年份。这将创建一个过滤器检索一整年的项目。

...

CustomMetaDateRangeCriteria yearCriteria = new CustomMetaDateRangeCriteria("publicationDate", GetFirstDateTimeInYear(cboYear.SelectedValue), GetLastDateTimeInYear(cboYear.SelectedValue));

...

    private DateTime GetFirstDateTimeInYear(string year)
    {
        return new DateTime(int.Parse(year), 1, 1);
    }

    private DateTime GetLastDateTimeInYear(string year)
    {
        return new DateTime(int.Parse(year) + 1, 1, 1).AddDays(-1);
    }
于 2012-10-25T08:06:33.707 回答