首页 > 解决方案 > 返回 oData 对象时隐藏空值

问题描述

我有下面的代码从 SQL 视图中获取数据,并使用 odata 以便我们可以通过在获取请求中使用查询字符串来查询数据。

我遇到的问题是Author可以为空,但如果它为空,我不希望它显示。我无法摆脱以我目前的方式映射它并向其中添加三元运算符也隐藏空数据破坏了Queryable功能。

[HttpGet]
[CustomEnableQuery(AllowedQueryOptions = Filter | Skip | Top | OrderBy | Count | Select, PageSize = 100)]
[ProducesResponseType(typeof(IQueryable<BookViewModel>), Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), Status400BadRequest)]
[ProducesResponseType(typeof(ProblemDetails), Status401Unauthorized)]
[ProducesResponseType(typeof(ProblemDetails), Status404NotFound)]
public IQueryable<BookViewModel> Get()
{
    return _defaultContext.Books
                          .AsQueryable()
                          .Select(x => new BookViewModel
                          {
                              BookId = x.BookId,
                              BookName= x.BookName,
                              BookPrice= x.BookPrice,
                              PublishingCompany= x.PublishingCompany,
                              Author = new Author 
                              {
                                  AuthorName = x.AuthorName,
                                  Birthday = x.Birthday
                              }
                          });
}

当作者为空时,上面的代码返回:

{
    "BookId ": "f726bcf7-e4f6-4609-b25e-a0d47cda7894",
    "BookName": "Atomic Habits",
    "BookPrice": "500",
    "PublishingCompany": "Penguin",
        "Author ": {
            "AuthorName": null,
            "Birthday": null,
        }
}

我如何在 null 时将 Author 全部隐藏起来,或者将 Author 显示为 null 而映射出的值也显示为 null?

标签: c#.netodata

解决方案


您可以使用??等于的运算符if (obj == null) obj = "something else"

.......
Author = new Author 
{
     AuthorName = x.AuthorName ?? "",
     Birthday = x.Birthday ?? ""
}
......

推荐阅读