我想问一下我还能尝试什么?
我正在使用 C# 编写 ASP.NET Core 7 Web API,并且我正在尝试更改数据库中名为
Startdate
(其类型为 DateTime
)的字段以自定义其格式。
该字段的格式是
YYYY-MM-DD HH:mm:ss (CE.)
,当输出到Swagger Json时我得到了YYYY-MM-DDTHH:mm:ss
。
我想要的是
YYY/MM/DD HH:mm:ss (ROC.)
。
我曾尝试在视图模型中将其类型设置为字符串,在实现中,我从 LINQ 获取它,但失败了......
我的视图模型:
public class ABCViewModel
{
public DateTime? startDate { get; set; }
}
action方法中的实现:
public async Task<List<ABCViewModel>> RetrieveAllAsync()
{
List<ABCViewModel> ABC = new List<ABCViewModel>();
try
{
var aa = await dbABC.tableABC
.Select(st
=> new ABCViewModel
{
startDate = st.Startdate.Value.ToString()
})
.OrderByDescending(d => d.startDate)
.ToListAsync();
return aa;
}
catch (Exception ex)
{
logger.LogError(ex, "RetrieveAllAsync Error");
}
return ABC;
}
控制器:
[Route("api/[controller]")]
[ApiController]
public class ABCController : ControllerBase
{
private readonly IABC abc;
public ABCController(IABC abc)
{
this.abc = abc;
}
// GET: api/<ABCController>
[HttpGet]
public async Task<List<ABCViewModel>> GetABC()
{
var result = await abcService.RetrieveAllAsync();
return result;
}
}
接口:
public interface IABC
{
Task<List<ABCViewModel>> RetrieveAllAsync();
}
很抱歉我错误的语法和奇怪的描述,希望我提供的代码可以帮助我描述......
如果还有什么我可以做的,我将不胜感激。
谢谢您的帮助。
我尝试过的:
更改:
startDate = st.Startdate.Value.ToString()
(如果使用这个,只能得到CE。:DD-M YY)
至:
startDate = (st.Startdate.Value.Year - 1911).ToString() + "/"
+ st.Startdate.Value.Month + "/"
+ st.Startdate.Value.Day + " "
+ st.Startdate.Value.Hour + ":"
+ st.Startdate.Value.Minute + ":"
+ st.Startdate.Value.Second
得到:
112/1/1 0:0:0
我想要:
112/01/01 00:00:00
(快了!
2. 添加: 上面
[DisplayFormat(DataFormatString = " {0:yyy/MM/dd HH:mm:ss} ")]
public DateTime? startDate { get; set; }
但什么都没有改变。
3. 添加:
.AsEnumerable()
更改为:
var abc = await dbABC.tableABC
.OrderByDescending(d => d.startDate)
.ToListAsync()
.AsEnumerable()
.Select(st
=> new ABCViewModel
{
startDate = st.Startdate.Value.ToString(),
});
得到:
AsEnumerable()
只能在ToList()
使用,ToListAsync()
不能使用。
4. 我想将我的代码更改为: stackoverflow01
但是因为我的工作有合作者,所以我不能这样做,以免其他人遇到任何问题。
5. 我找到: stackoverflow02
所以我尝试更改控制器上的格式,但也许我失败了,因为我没有足够的能力。
终于发现我的错误了!
仅在 try{} 的操作方法中更改我的实现:
try
{
var aa = await dbABC.tableABC
.Select(st
=> new ABCViewModel
{
startDate = st.Startdate.Value.ToString()
})
.OrderByDescending(d => d.startDate)
.ToListAsync();
return aa;
}
到
try
{
var aa = await (from st in dbABC.tableABC
orderby st.Startdate descending
select new DisasterViewModel
{
startDate = st.Startdate.Value.ToString("yyy/MM/dd HH:mm:ss")
}
).ToListAsync();
return aa;
}
一定会成功。
真是没想到! 感谢 @RolandMai 和 @Fildor 的帮助,也许我在 LINQ 上有一点能力......?