0

CRMダッシュボードの1つで実行されているSilverlightアプリケーションがあります。指定された日付がレコードの日付と等しいかどうかを確認する必要があります。また、レコードのフィールドの1つがレコードの日付と等しいかどうかも確認する必要があります。空の文字列:

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」と互換性がありません

null許容の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を使用してODataURLを生成しているようです。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 に答える