Linq to EF string和DateTime类型的转换

这几天使用Linq to EF 出现以下几个bug,记录下来

问题一:Linq to EF求两个时间段的列表记录

错误提示:

LINQ to Entities does not recognize the method ‘System.DateTime
ToDateTime(System.String)’ method, and this method cannot be
translated into a store expression. LINQ to Entities
不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

代码:

lst = lst.Where(a =>
Convert.ToDateTime(a.returnDate) >= beginDate &&
Convert.ToDateTime(a.returnDate) <= endDate);

原因分析:

因为在数据库中 a.returnDate 字段是string,beginDate是Datetime类型,在使用Convert.ToDateTime 解析出现错误,而字段类型又不能更改,在将beginDate转换成string,然後使用String的静态方法.Compare顺利解决。
解决方法如下:

lst= lst.Where(d => String.Compare(d.returnDate, beginDate)>=0
&&String.Compare( d.returnDate, endDate)<=0);

具体资料可参照这个链接深入谈谈 C# 的 String.CompareTo

问题二:时间类型不规范

后台传送过来的参数是这样的形式:

“/Date(1405056837780)/”

扫描二维码关注公众号,回复: 5304870 查看本文章

需要转化为这种形式:

2018-07-10

js的代码如下:

//往往json传过来的时间都是"/Date(1405056837780)/"
//转换需要的方法
String.prototype.ToString = function (format) {
                var dateTime = new Date(parseInt(this.substring(6, this.length - 2)));
                format = format.replace("yyyy", dateTime.getFullYear());
                format = format.replace("yy", dateTime.getFullYear().toString().substr(2));
                format = format.replace("MM", dateTime.getMonth() + 1)
                format = format.replace("dd", dateTime.getDate());
                format = format.replace("hh", dateTime.getHours());
                format = format.replace("mm", dateTime.getMinutes());
                format = format.replace("ss", dateTime.getSeconds());
                format = format.replace("ms", dateTime.getMilliseconds())
                return format;
            };
//调用,可重载
"/Date(1405056837780)/".ToString("yyyy年MM月dd日hh时mm分ss秒");
"/Date(1405056837780)/".ToString("yyyy-MM-dd");

问题三:url传参

ASP.NET MVC3 通过Url传多个参数方法具体可以参照这篇文章

问题四:Linq to EF string 转 DateTime

LINQ TO EF 对于string转DateTime无法使用ConvertToDateTime的解决办法:

  1. 引入SqlFunctions,也就是增加using System.Data.Entity.SqlServer;
  2. 由于SqlFunctions并没有Convert函数,所以使SqlFunctions.DateAdd(“Day”,0,t.workdate)变通的实现下,顾名思义,就是在类型为Day的值上加0,也就是不加天数,那就是t.workdate当天了。t.workdate在数据库里是nvarchar类型的,在domain里是string类型

猜你喜欢

转载自blog.csdn.net/qq_34769573/article/details/80993154