LINQ里的日期字符串比较

mizuho_2006 2012-02-18 08:31:27
环境是VS2010,Silverlight4
数据库里的日期是字符型的,我要做的是查询两个日期之间,并符合用户名的结果。
好像LINQ里的两个字符串日期不能直接比较,必须转换成DateTime才可以。


DateTime? dtBegin = Convert.ToDateTime(dateBegin.Text);
DateTime? dtEnd = Convert.ToDateTime(dateEnd.Text);

context.Load(context.GetTB_SUMMARYCONTENTQuery().Where(r => r.USERNAME == username && Convert.ToDateTime(r.RECORDDATE).CompareTo(dateBegin) > 0 && Convert.ToDateTime(r.RECORDDATE).CompareTo(dtEnd) < 0));


可这么写运行的时候总是提示

[ExpressionTypeDoesNotMatchMethodParameter]
参数: System.Nullable`1[System.DateTime],System.Object,Int32 CompareTo(System.Object)
调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题。请访问 http://go.microsoft.com/fwlink/?linkid=106663&Version=4.1.10111.0&File=System.Core.dll&Key=ExpressionTypeDoesNotMatchMethodParameter

位于 System.ServiceModel.DomainServices.Client.WebDomainClient`1.BeginQueryCore(EntityQuery query, AsyncCallback callback, Object userState)
位于 System.ServiceModel.DomainServices.Client.DomainClient.BeginQuery(EntityQuery query, AsyncCallback callback, Object userState)
位于 System.ServiceModel.DomainServices.Client.DomainContext.Load(EntityQuery query, LoadBehavior loadBehavior, Action`1 callback, Object userState)
位于 Silverlight4.Views.view.btnSearch_Click(Object sender, RoutedEventArgs e)
位于 System.Windows.Controls.Primitives.ButtonBase.OnClick()
位于 System.Windows.Controls.Button.OnClick()
位于 System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
位于 System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
位于 MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)



我把服务端的Silverlight的调试给禁止了(在xxx.web项目的属性,web,调试器里的silverlight的钩钩去掉了),是不是这个原因导致的呢?可是其他页面运行都没问题。主要是我不去掉的话根本就不能浏览页面,可能是哪里配置有问题,在单位都是正常的,在家必须要把服务端silverlight调试禁止才可以。
...全文
1082 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfl755677892 2014-09-17
  • 打赏
  • 举报
回复
好歹说说说怎么解决的呀,急等
yjgking 2013-02-28
  • 打赏
  • 举报
回复
我也碰到这种问题,请问楼主是怎么解决的?
mizuho_2006 2012-02-20
  • 打赏
  • 举报
回复
问题已经解决了。散分。
Rommel_Gao 2012-02-18
  • 打赏
  • 举报
回复
额,不好意思。我也发现了,那个方法还有个重载,所以null也是可以的。
mizuho_2006 2012-02-18
  • 打赏
  • 举报
回复
谢谢1L朋友的回复

数据库里该字段虽然设置了可为空,但实际上都不是空的,而且也都是正确的时间字符串格式。

我也想到是不是数据库里字符串格式不能确定是否是日期格式导致的。。但是学LINQ时间不长,不知道怎么判断。。我只会在表达式里写条件过滤。。

只有Load(查询函数)之后才会得到查询数据,所以我直接写判断是不行的。。不知怎么解决。。
Rommel_Gao 2012-02-18
  • 打赏
  • 举报
回复
看错误信息应该是时间为空的情况没有处理吧,DateTime.CompareTo(DateTime) 方法接收的参数不是可空的,所以一旦传个null进去,就会报这个错了吧。
既然定义为可空类型,所以你应该先判断dateBegin,dateEnd是否为空:如果为空应该有套逻辑去处理,比如给个默认值或者干脆就不比较什么的;不为空的时候再用Convert.ToDateTime(r.RECORDDATE).CompareTo(dateBegin.value)去比较。
至于和silverlight调试的关系,我也不太清楚,没搞过,我猜是因为某些动作导致没法正确的从页面或得到时间值,导致转换为DateTime时为空了吧。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧