C#Linq To实体在IQueryable中格式化的DateTime

本文关键字:格式化 DateTime IQueryable To 实体 C#Linq | 更新日期: 2023-09-27 18:26:14

我试图实现的是让"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
};

C#Linq To实体在IQueryable中格式化的DateTime

我同意这种观点,即应该在表示层中处理它。但是,如果您真的想在SQL server上执行此操作,可以将0固定到表示分钟的字符串,然后使用Right函数只使用最右边的两个字符。

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

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

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
};