Linq 2 Sql DateTime格式为字符串yyyy-MM-dd

基本上,我需要相当于T-SQL CONVERT(NVARCHAR(10), datevalue, 126)

我试过了:

  1. from t in ctx.table select t.Date.ToString("yyyy-MM-dd")但它抛出不支持的exception
  2. from t in ctx.table select "" + t.Date.Year + "-" + t.Date.Month + "-" + t.Date.Day但我不认为这是一个可用的解决方案,因为我可能需要能够改变格式。

我看到的唯一选择是使用Convert.ToString(t.Date, FormatProvider) ,但我需要一个格式提供程序,我不确定它是否有效

FormatProvider不起作用, String.Format不起作用( string.Format("{0:yyyy-MM-dd}", t.Date)抛出不支持的exception)。

如果其他人有这个问题,我通过创建一个单独的函数来为我做日期格式化解决了这个问题。

我的Linq看起来像这样:

 from a in context.table where ... select new Class { DateString = GetFormattedString(a.DateTimeObject) } 

并且GetFormattedString只返回DateTimeObject.ToString(“yyyy-MM-dd”); 这适合我!

假设t.Date为空( DateTime? ),这可能是问题,请尝试使用:

 from t in ctx.table select (t.HasValue ? t.Date.Value.ToString("yyyy-MM-dd") : string.Empty ); 

编辑:好的,第二次尝试……

问题是转换为SQL它试图将.ToString()转换为SQL表示,并失败。 因此,如果您应该执行以下操作,它应该工作:

 (from t in ctx.table select t.Date).ToList().Select(d => d.ToString("yyyy-MM-dd")) 

要么

 (from t in ctx.table select t.Date).AsEnumerable().Select(d => d.ToString("yyyy-MM-dd")) 

AsEnumerable()将以前使用的IQueryable转换为IEnumerable ,从而停止生成SQL(在Linq to SQL的情况下)或实现特定IQueryable的提供程序的任何其他transfromation(例如Linq to SQL Provider)。

注意,在调用AsEnumerable()之前,您应该已经完成​​了任何要转换为SQL并直接在数据库上执行的操作。

是否有理由在数据库端执行转换? 每当我遇到这种情况时,我倾向于只允许数据库给我原始数据,然后在应用程序中进行按摩和操作。 根据对数据库服务器的请求量和结果集的大小,我不希望将处理和响应时间用于执行客户端可以处理的数据转换。

尝试创建一个可以设置属性的对象类,并让属性成为视图的值。将LINQ中的日期时间数据设置为字符串而不是datetime .. ex。

 //Property class [DataContract()] public class Info { [DataMember(Name = "created_date")] public string CreateDate; } //Controller var date = from p in dbContext.Person select p; CreateDate = Convert.ToDateTime(p.create_date).ToString("yyyy-MM-dd"); 

希望你能试试这个..我在过去的应用程序中有这个,这就是我所做的。

看看3号

 var user = (from u in users select new { name = u.name, birthday = u.birthday.Value }) .ToList() .Select(x => new User() { name = x.name, birthday = x.birthday.ToString("yyyyMMdd") // 0埋めされるよ}); 

试试这个

 var select = from s in db.Table where s.date == someDate select new { date = DateTime.Parse(s.date.ToString()).ToString("yyyy-MM-dd"), };