【问题标题】:Populating viewmodel array填充视图模型数组
【发布时间】:2021-03-15 03:18:02
【问题描述】:

我做错了什么?在下面的代码中(特别是在 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; }
    }

【问题讨论】:

    标签: c# .net-5 asp.net-mvc-viewmodel


    【解决方案1】:

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

    不是这个

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

    试试

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

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

    【讨论】:

    • 我试过了,但现在我收到了这条消息:PrintNFePedidoItens[] 不包含“添加”的定义,并且没有可访问的扩展方法“添加”接受 PrintNFePedidoItens[] 类型的第一个参数可以找到。 @Lvcios - 我仍然像这样初始化:var Itens = Array.Empty&lt;PrintNFePedidoItens&gt;();
    【解决方案2】:

    这种方法行得通。

    而不是这个:

        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,
             Nome = i.IdProdutoNavigation.Nome,
             Valor = i.IdProdutoNavigation.Preco,
             Qntd = i.Quantidade
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多