c# - LINQ 使用 DTO 将 SQL Server 日期时间转换为字符串

标签 c# entity-framework linq datetime

我的任务是将页面添加到我们未构建但任务是处理的 API。 API 使用 C# MVC5。我不太了解 MVC5,但我试图保持 API 其余部分使用的相同设计模式。我必须添加允许前端用户将文件上传到服务器的功能,该服务器将被处理以插入到 SQL Server 数据库中。此功能还将从数据库中的表中返回所有文件名和导入文件状态的列表。

我遇到的问题是在拉取文件列表的 LINQ 查询中将日期时间转换为字符串。

我尝试使用这个答案 LINQ convert DateTime to string , 但没有运气。

这是我目前所拥有的,我已经标记了导致问题的行:

[Route("ImportLogs", Name ="GetImportLogs")]
[HttpGet]
[ResponseType(typeof(List<IHttpActionResult>))]
public IHttpActionResult GetImportLogs()
{
    var query =
        from dbitem in db.ImportLogs
        orderby dbitem.import_log_id
        select new ImportLogDto()
        {
            Id = dbitem.import_log_id,
            FileName = dbitem.import_file_name,
            ImportTimeStamp = dbitem.import_timeStamp,
            ImportStatus = dbitem.import_status,
            ImportMessage = dbitem.import_message
         };

         query.ToList()
             .Select(o => new ImportLogDto
             {
                 Id = o.Id,
                 FileName = o.FileName,
                 ImportMessage = o.ImportMessage,
                 ImportStatus = o.ImportStatus,
                 ImportTimeStamp = o.ImportTimeStamp.ToString() //PROBLEM LINE
              });

         return Ok(query);
}

我得到的错误是

Cannot implicitly convert type 'string' to 'System.DateTime'

哪里做错了?任何帮助,将不胜感激。 TIA。

编辑:

这是 DTO:

public class ImportLogDto
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public DateTime ImportTimeStamp { get; set; }
    public string ImportStatus { get; set; }
    public string ImportMessage { get; set; }

}

最佳答案

您正试图将一个 string 分配给一个 DateTime,所以您得到了那个异常。如果您想将其转换为字符串,请按如下方式更改您的模型:

public class ImportLogDto
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string ImportTimeStamp { get; set; } // Changed type
    public string ImportStatus { get; set; }
    public string ImportMessage { get; set; }    
}

然后是您的查询:

var query = (from dbitem in db.ImportLogs
             orderby dbitem.import_log_id
             select new {
                 Idbitem.import_log_id,
                 dbitem.import_file_name,
                 dbitem.import_timeStamp, // Still DateTime
                 dbitem.import_status,
                 dbitem.import_message
             }).AsEnumerable(); // Retrieved from Database
            .Select(o => new ImportLogDto
            {
                Id = o.import_log_id,
                FileName = o.import_file_name,
                ImportMessage = o.import_message,
                ImportStatus = o.import_status,
                ImportTimeStamp = o.import_timeStamp.ToString() // Changes to string
            });

如果您想更改 API 的 DateTime 格式,则使用其重载 ToString 并指定格式:

ImportTimeStamp = o.ImportTimeStamp.ToString("dd/MM/yyyy HH24:MI:ss")

有关重载的更多信息,请阅读:Custom Date and Time Format Strings

关于c# - LINQ 使用 DTO 将 SQL Server 日期时间转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43543930/

相关文章:

c# - 使我的 COM 程序集调用异步

c# - Linq 中的排序和唯一记录

asp.net-mvc - 数据库中已经有一个名为 'AspNetRoles'的对象

c# - 如何在没有中间对象的情况下按字母顺序对两个单独的列表进行排序?

c# - 根据数组元素对数组的每 500 个元素进行分组

c# - 如何使用 c# 将自动完成应用于 excel 中的下拉列表?

c# - 如何在 WPF 中使用 ItemStringFormat 大写?

asp.net-mvc-3 - MVC、EF - Unity 中的 DataContext 单例实例 Per-Web-Request

c# - Entity Framework IDENTITY_INSERT ON 不起作用

Linq/lambda 表达式