0

我的一个 CRM 仪表板中有一个 silverlight 应用程序,它需要检查指定日期是否等于记录上的日期,它还需要检查记录上的一个字段是否是一个空字符串:

private void SearchContacts(Nullable<DateTime> date)
{
    try
    {
         DateTime UpdatedTime = date ?? DateTime.Now;
         DataServiceQuery<myentity> query = (DataServiceQuery<myentity>)_context.myentitySet.AddQueryOption("$filter", "((my_ForMonthEnding eq '" + UpdatedTime.ToString() + "') and (my_ActionDetails eq ''))");
         query.BeginExecute(OnMyEntitySearchComplete, query);
    }
    catch (SystemException ex)
    {
         _syncContext.Send(new SendOrPostCallback(showErrorDetails), ex);
    }
}

此代码生成以下错误:

运算符“eq”与操作数类型“System.Nullable”不兼容

这对我来说似乎很奇怪,因为我正在将可为空的 DateTime 转换为标准 DateTime,所以我一定遗漏了一些东西。有人可以解释一下这里需要做什么吗?

4

2 回答 2

1

这是我使用的有效查询:

DataServiceQuery<myentity> query = (DataServiceQuery<myentity>)_context.myEntitySet.Where(c => c.my_ForMonthEnding == date && c.my_ActionDetails.Equals(null));
                query.BeginExecute(OnContactSearchComplete, query);
于 2012-11-15T10:23:51.120 回答
0

以前从未使用过 Silverlight 或 DataServiceQuery,所以这可能是在黑暗中刺伤,但my_ForMonthEnding 会是一种nullable类型。您可以尝试将其更改为my_ForMonthEnding.Value吗?

编辑 1

好的,看起来您正在使用 DataServiceQuery 生成 OData URL。这是我使用 LinqPad 创建的示例过滤器:

$filter=(CreatedOn eq datetime'2012-11-14T11:18:38.4769698-05:00') and (my_name eq '')

CreatedOn 是一个DateTime?,这很好用。您可以尝试在字符串日期前添加日期时间并删除外括号吗?

        DataServiceQuery<myentity> query = (DataServiceQuery<myentity>)_context.myentitySet
            .AddQueryOption("$filter", "(my_ForMonthEnding eq datetime'" + UpdatedTime.ToString() + "') and (my_ActionDetails eq '')");
        query.BeginExecute(OnMyEntitySearchComplete, query);
于 2012-11-14T15:44:26.687 回答