linq C# ASP.NET Core 7 Web API:更改日期时间格式以自定义

emeijp43  于 2023-09-28  发布在  C#
关注(0)|答案(1)|浏览(157)

我想问我还能尝试什么?
我正在用C#编写一个ASP.NET Core 7 Web API,我试图从数据库中更改一个名为StartdateDateTime类型字段,以自定义其格式。
字段的格式是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();
}

很抱歉我的错误语法和奇怪的描述,希望我提供的代码可以帮助我描述...
如果还有什么我能做的,我会很感激的。
感谢你的帮助.
我尝试过的:
1.变更:

startDate = st.Startdate.Value.ToString()

(if用这个,只有CE。:日-月-年)
收件人:

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.加:public DateTime? startDate { get; set; }以上[DisplayFormat(DataFormatString = " {0:yyy/MM/dd HH:mm:ss} ")]
但一切都没有改变。
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
所以我试图改变我的控制器上的格式,但也许我失败了,因为我没有足够的能力。

kmpatx3s

kmpatx3s1#

我终于发现我的错误了!
只在try{}的action方法中更改我的Implementation:

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上有点能力...?

相关问题