c# - 在 ASP.NET Core Web API 的 HttpGet 方法中返回模型的单个属性
问题描述
我必须在 ASP.NET Core API 的 GetAll() 方法中返回模型的单个属性。这是我的模型:
using System;
using System.Collections.Generic;
namespace ProjectWayneAPI.Models
{
public partial class Consignment
{
public Guid Id { get; set; }
public DateTime? DateCreated { get; set; }
public bool? Deleted { get; set; }
public string CustomerReference { get; set; }
public string ConsignmentNote { get; set; }
public Guid AccountId { get; set; }
public Guid BookedByUser { get; set; }
public string DescriptionToLeave { get; set; }
public virtual Account Account { get; set; }
public virtual User BookedByUserNavigation { get; set; }
public virtual User CheckedByUserNavigation { get; set; }
public virtual User ModifiedByUserNavigation { get; set; }
public virtual User QuotedByUserNavigation { get; set; }
}
}
我必须在我的控制器的方法中只返回寄售单(但我必须拉出所有这些)。
这是我的控制器:
[Route("api/[controller]")]
[ApiController]
public class ConsignmentsController : ControllerBase
{
private readonly WayneContext _context;
public ConsignmentsController(WayneContext context)
{
_context = context;
}
//GET: api/Consignment Notes
[Route("[connote]")]
[HttpGet]
public async Task<ActionResult<IEnumerable<Consignment>>> GetConsignmentNote()
{
var connote = await _context.Consignment
.Include(x => x.ConsignmentNote)
.ToListAsync();
return connote;
}
// GET: api/Consignments
[HttpGet]
public async Task<ActionResult<IEnumerable<Consignment>>> GetConsignment()
{
var consignments = await _context.Consignment
.Where(c => c.Deleted == false)
.Include(bu=> bu.BookedByUserNavigation)
.ToListAsync();
return consignments;
}
}
我必须使用此方法返回所有含义 public async Task>> GetConsignmentNote(),如果您检查方法内的 linq 查询,则该查询返回异常。在这种情况下,我如何覆盖 [HttpGet] ?
解决方案
Include
用于包含相关属性(即您的导航属性,例如Account
),而不是选择普通属性的子集,例如ConsignmentNote
.
如果您想要的只是该ConsignmentNote
属性,那么您应该Select
使用一个新的Consignment
并且只填充该特定属性:
var connote = await _context.Consignment
.Select(x => new Consignment
{
ConsignmentNote = x.ConsignmentNote
})
.ToListAsync();
return connote; // List<Consignment>
但请注意,这仍然会选择一个大部分为空的对象。如果您想要的只是一个string
仅包含值的列表,那么您可以通过直接选择属性并更改返回类型来实现:
public async Task<ActionResult<IEnumerable<string>>> GetConsignmentNote()
{
var connote = await _context.Consignment
.Select(x => x.ConsignmentNote)
.ToListAsync();
return connote; // List<string>
}
推荐阅读
- mysql - 指数超出范围。插入数据时必须为非负且小于集合错误的大小
- javascript - 将小时、分钟、秒添加到输入字段并使用 js 显示为 hh:mm:ss am/pm 并在保存到 Blazor 中的 db 之前转换为 Timespan
- masstransit - MassTransit StateMachineSagaTestHarness - 双重消息消费
- flutter - 如何使用 Dart 反射监听方法调用?
- lua - 如何在 Roblox 中的字符串中添加数字
- vba - 如何从odt解密奇怪的宏?
- vaadin7 - 在 vaadin 14.4.4 中使用插件
- regex - 正则表达式 VBA
- javascript - 谷歌地图 getPlace().geometry 总是未定义
- reactjs - TypeError:无法读取未定义错误的属性“地图”