我的任务是将页面添加到我们未构建但任务是处理的 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/