C#Linq To Entities IQueryable中的格式化日期时间

时间:2015-12-09 19:55:51

标签: c# sql linq

我想要实现的是获得" FormattedTimeStamp"成员变量,包含格式如下的日期:" 12/09/2015 13:00"

我得到的是:" 12/9/2015 13:0"

无论如何使用普通的LINQ to SQL而不是传播到服务器(使用AsEnumerable()等)来实现这一点吗?

请参阅下文,了解我现在所编制和运行的内容,但没有给出我需要的内容。

谢谢。

IQueryable<Import_ErrorDTO> dtoErrors = from i in errors
    select new Import_ErrorDTO
  {
      Error_ID = i.Error_ID,
      ErrorDescription = i.ErrorDescription,
      FileName = i.FileName,
      ImportTimeStamp = i.ImportTimeStamp,
      FormattedImportTimeStamp = SqlFunctions.StringConvert((double)SqlFunctions.DatePart("Month", i.ImportTimeStamp)).Trim() + "/" +
                          SqlFunctions.StringConvert((double)SqlFunctions.DatePart("Day", i.ImportTimeStamp)).Trim() + "/" +
                          SqlFunctions.StringConvert((double)SqlFunctions.DatePart("Year", i.ImportTimeStamp)).Trim() + " " +
                          SqlFunctions.StringConvert((double)SqlFunctions.DatePart("hh", i.ImportTimeStamp)).Trim() + ":" +
                          SqlFunctions.StringConvert((double)SqlFunctions.DatePart("mi", i.ImportTimeStamp)),
      Program = i.Program
};

2 个答案:

答案 0 :(得分:1)

我同意这个意见,它应该在表示层处理。但是如果您真的想在SQL服务器上执行此操作,则可以将0置于表示分钟的字符串中,然后仅使用Right函数将最右边的2个字符包含在内。

 SqlFunctions.Right("0" + SqlFunctions.StringConvert(
     (double)SqlFunctions.DatePart("mi", i.ImportTimeStamp)), 2)

答案 1 :(得分:-1)

解决此问题的一种方法是创建构造函数;

public Import_ErrorDTO(DateTime dt)
{
     FormattedDate = dt.ToString("MM/dd/yyyy HH:mm");
}

然后传入ImportTime:

IQueryable<Import_ErrorDTO> dtoErrors = from i in errors
    select new Import_ErrorDTO(i.ImportTimeStamp)
  {
      Error_ID = i.Error_ID,
      ErrorDescription = i.ErrorDescription,
      FileName = i.FileName,
      ImportTimeStamp = i.ImportTimeStamp,
      Program = i.Program
};