2012-11-06 112 views
0

我被困在ObjectQuery類中,它總是給我錯誤,因爲 System.Data.Entity:參數類型'Edm.DateTime'和'Edm.String'與此操作不兼容。 WHERE謂詞實體sql日期時間字面量

請給我解決方案,我遵循上面的方法,但它沒有奏效。

我的代碼如下:

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

Cleint端代碼:

這個代碼是在使用的jqGrid建成,其中有一個名爲CreatedDate列,填補了下拉列表中,我有一個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'] 
     } 
     } 

請幫助我,因爲我堅持這種方法,我只需要這樣做。 在此先感謝。

回答

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' 

其次是查詢本身。