首页 > 解决方案 > 在 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] ?

标签: c#linqasp.net-coreasp.net-core-webapief-core-3.1

解决方案


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>
}

推荐阅读