2012-11-06 58 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' 

其次是查询本身。