4

我有一个带有“new_StartDate”和“new_EndDate”属性的“new_Term”实体。我实际上想在单个查询表达式中编写此语句:

new_StartDate <= DateTime.UtcNow <= new_EndDate

我的第一个想法是使用 Between ConditionOperator,但 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")

除了明显的两个条件表达式之外,有没有办法在一个条件表达式中做到这一点?

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

这对我有用。变量 first 和 last 是 DateTime 类型。

于 2012-08-16T08:00:05.733 回答