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