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日間)を指定しようとすると、データベースにいくつかのレコードがある場合でも、レコードは返されません。指定されたEventStartDateとEventEndDateの間のすべてのイベントを返すdateKeyCriteriaを指定する際に、間違いがありますか?

4

2 に答える 2

5

クエリを作成する際のロジックは実際には正しくないことを知っておく必要がありますが、とにかく使用できる別のオプション(はるかに最適)があります:CustomMetaDateRangeCriteria。beginRange、endRange、format(日付が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」形式で年を選択できるリストであることに注意してください。これにより、1年間アイテムを取得するフィルターが作成されます。

..。

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 に答える