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

Bog*_*xim 11 c# formatting datetime linq-to-sql

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

我试过了:

  1. from t in ctx.table select t.Date.ToString("yyyy-MM-dd") 但它抛出不支持的异常
  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)罚球不支持例外太).

amc*_*mtt 7

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

我的Linq看起来像这样:

from a in context.table
where ...
select new Class
{
DateString = GetFormattedString(a.DateTimeObject)
}
Run Code Online (Sandbox Code Playgroud)

而GetFormattedString只返回DateTimeObject.ToString("yyyy-MM-dd"); 这适合我!


Axe*_*ger 6

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

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

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

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

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

要么

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

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

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


Nei*_* T. 5

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