填充视图模型数组

问题描述

我做错了什么?在下面的代码中(特别是在 foreach 上),当我有多个 'itens' 时,只有最后一个会在 Itens 数组中。

我正在使用一个视图模型数组,如下所示。

如果您能给我一个样品,我将不胜感激。

我创建了一个这样的存储库类:

public async Task<PrintNFePedidoRoot> PedidoPrint(int idPedido)
{
    using var db = new KeplerContext(_optionsBuilder);

    var pedido = await db.Pedido.AsNoTracking()
        .FirstOrDefaultAsync(m => m.IdPedido == idPedido);

    var pedidoItens = await db.PedidoItens
        .Where(i => i.IdPedido == idPedido)
        .Include(p => p.IdProdutoNavigation)
        .AsNoTracking().ToListAsync();

    var pedidoPrint = new PrintNFePedidoRoot()
    {
        IdPedido = idPedido,TotalValor = pedido.Val,Desconto = 0,Taxa = pedido.Tax,TotalPagar = pedido.Tot,};

    var Itens = Array.Empty<PrintNFePedidoItens>();
   
    foreach (PedidoItens i in pedidoItens)
    {
        if (i.IdProdutoMeia != null)
        {
            var produto = db.Produto
                .AsNoTracking()
                .First(p => p.IdProduto == i.IdProdutoMeia);

            i.IdProdutoNavigation.Nome = i.IdProdutoNavigation.Nome + "/" + produto.Nome.Replace("Exp","").Trim();
        }

        Itens = new[]
        {
            new PrintNFePedidoItens
            {
                IdProduto = i.IdProduto,Nome = i.IdProdutoNavigation.Nome,Valor = i.IdProdutoNavigation.Preco
            }
        };
    }

    pedidoPrint.Itens = Itens;

    return pedidoPrint;
}

我创建了一个像这样的 viewmodel 类:

    public class PrintNFePedidoRoot
    {
        [JsonProperty("id_pedido")]
        public int IdPedido { get; set; }

        [JsonProperty("total_valor")]
        public int TotalValor { get; set; }

        [JsonProperty("desconto")]
        public int Desconto { get; set; }

        [JsonProperty("taxa")]
        public int Taxa { get; set; }

        [JsonProperty("total_pagar")]
        public int TotalPagar { get; set; }

        [JsonProperty("pedido_itens")]
        public PrintNFePedidoItens[] Itens { get; set; }
    }

    public class PrintNFePedidoItens
    {
        [JsonProperty("id_produto")]
        public int IdProduto { get; set; }

        [JsonProperty("nome")]
        public string Nome { get; set; }

        [JsonProperty("valor")]
        public decimal Valor { get; set; }
    }

解决方法

看起来您正在将一个只有一个元素的新数组分配给“Itens”,而不是向该数组添加值。

代替这个

Itens = new[]
    {
        new PrintNFePedidoItens
        {
            IdProduto = i.IdProduto,Nome = i.IdProdutoNavigation.Nome,Valor = i.IdProdutoNavigation.Preco
        }
    };

试试

Itens.Add(new PrintNFePedidoItens
        {
            IdProduto = i.IdProduto,Valor = i.IdProdutoNavigation.Preco
        });

请确保您正确初始化了“Itens”。

,

这种方法行得通。

取而代之的是:

    var Itens = Array.Empty<PrintNFePedidoItens>();

我已经改成这样了:

    var Itens = new List<PrintNFePedidoItens>();

取而代之的是:

    public class PrintNFePedidoRoot
    {
       ...

        [JsonProperty("pedido_itens")]
        public PrintNFePedidoItens[] Itens { get; set; }
    }

我已经改成这样了:

    public class PrintNFePedidoRoot
    {
      ...

        [JsonProperty("pedido_itens")]
        public List<PrintNFePedidoItens> Itens { get; set; }
    }

所以,我可以用这个:

   Itens.Add(new PrintNFePedidoItens
   {
         IdProduto = i.IdProduto,Valor = i.IdProdutoNavigation.Preco,Qntd = i.Quantidade
   });