4

「new_StartDate」属性と「new_EndDate」属性を持つ「new_Term」エンティティがあります。このステートメントを単一のクエリ式で効果的に記述したいと思います。

new_StartDate <= DateTime.UtcNow <= new_EndDate

私の最初のアイデアはBetweenConditionOperatorを使用することですが、between演算子は単一の属性でのみ機能します。

// Not valid because the first parameter expects a string attribute name, not a value
new ConditionExpression(DateTime.UtcNow.Date, ConditionOperator.Between, "new_startdate", "new_enddate")

明らかな2つの条件式に加えて、単一の条件式でそれを行う方法はありますか?

new ConditionExpression("new_startdate", ConditionOperator.LessEqual, DateTime.UtcNow);
new ConditionExpression("new_enddate", ConditionOperator.GreaterEqual, DateTime.UtcNow);
4

3 に答える 3

7

質問の最後に、可能な限り最高の回答があると思います。

new ConditionExpression("new_startdate", ConditionOperator.LessEqual, DateTime.UtcNow);
new ConditionExpression("new_enddate", ConditionOperator.GreaterEqual, DateTime.UtcNow);

ConditionOperator 列挙が制限要因です。fetchXml を記述するか、queryexpression を使用するかに関係なく、この列挙で使用可能な条件演算子に行き詰まります。そして、あなたが正しく指摘したように、 between は必要なパラメーターを取りません。

そのステートメントをさらに削減するための唯一のサポートされている(オンプレミスのみ)オプションは、SQLを使用してフィルタービューにアクセスすることですが、それは確かにやり過ぎです:)

于 2012-07-30T17:38:43.220 に答える
1

FetchXMLで試しましたか?それを実行してから、 FetchXmlToQueryExpressionRequestを使用してクエリを実行できる場合があります。しばらく前に例を含むブログ投稿を書きました。

于 2012-07-30T14:41:42.150 に答える
0
QE.Criteria.AddCondition("modifiedon",  ConditionOperator.Between, new Object[] {
                first,
                last});

これは私のために働きます。最初と最後の変数はDateTime型です。

于 2012-08-16T08:00:05.733 に答える