0

System.Data.Entity: The argument types 'Edm.DateTime' and 'Edm.String' are incompatible for this operation., near WHERE predicate というエラーが常に表示される ObjectQuery クラスでスタックしています。

解決策を教えてください。上記のアプローチに従いましたが、うまくいきませんでした。

私のコードは次のとおりです。

C# コード:

var _dbModel = new VISAIntBPAEntities();
        var serializer = new JavaScriptSerializer();
        Filters f = (!_search || string.IsNullOrEmpty(filters)) ? null : serializer.Deserialize<Filters>(filters);
        //if (f != null)
        //{
        //    if (f.rules[0].field == "CreatedDate")
        //    {
        //        Convert.ToDateTime(f.rules[0].data).ToString();
        //    }
        //}
        ObjectQuery<Jobs> filteredQuery = (f == null ? _dbModel.Jobs : f.FilterObjectSet(_dbModel.Jobs));
        //if (f != null)
        //{
        //    if (f.rules[0].field == "CreatedDate")
        //    {
        //        filteredQuery.Parameters.Add(new ObjectParameter("CreatedDate", Convert.ToDateTime(f.rules[0].data)));
        //    }
        //}
        if (f != null)
        {
            DateTime dateTimeValue = Convert.ToDateTime(f.rules[0].data);
            filteredQuery = filteredQuery.Where(string.Format("(it.CreatedDate = DATETIME'{0:yyyy-mm-dd hh:mm}')", dateTimeValue));
        }
        filteredQuery.MergeOption = MergeOption.NoTracking; // we don't want to update the data
        var totalRecords = filteredQuery.Count();

クレイント側のコード:

このコードは、ドロップダウンを埋める CreatedDate という列を持つ jqgrid を使用して構築されています。データベースから個別の日付部分を取得する sql クエリがあります。ドロップダウンでの文字列の日付選択に基づいてフィルタリングを行っています。

{
        name: 'CreatedDate', index: 'CreatedDate', width: 140, stype: 'select', async: false, sorttype: 'date',
        edittype: 'select', editoptions: { value: getCreatedJobDate() }, editable: true, formatoptions: { newformat: 'm/d/Y' },
        //editrules: { required: true },
        searchoptions: {
        value: getCreatedJobDate,
        sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge', 'de']
        }
        }

私はこのアプローチで立ち往生しているので、私を助けてください。私はこの方法でのみ行う必要があります。前もって感謝します。

4

1 に答える 1

1

コメント化されたコードは、既に を試したことを示していますObjectParameter。できるよ

filteredQuery = filteredQuery.Where("it.CreatedDate = @createDate");
var par = new ObjectParameter("createDate", dateTimeValue);
filteredQuery.Parameters.Add(par);

そして、SQLコードは次のように表示されます

DECLARE @createDate DateTime = '2002-11-06 00:00:00.000'

その後にクエリ自体が続きます。

于 2012-11-06T18:07:24.277 に答える