首页 > 解决方案 > 通过 Linq 表达式的 foreach 显示所有项目

问题描述

我正在尝试制作价目表、数量、产品名称,但我无法向这些项目展示有人知道我做错了什么?谢谢你。

float precototal = 0
                var ClienteCompraQuantidade =
                    from c in basedados.DetalheCompra
                    where c.ComprasNrCompra == p.NrCompra
                    select c.Quantidade;

                var ClienteCompraPreco =
                    from c in basedados.DetalheCompra
                    join f in basedados.Produto
                         on c.ProdutosCodProduto equals f.CodProduto
                    where c.ComprasNrCompra == p.NrCompra && c.ProdutosCodProduto == f.CodProduto
                    select f.Designacao;

                var ClienteCompraDesignacao=
                    from c in basedados.DetalheCompra
                    join f in basedados.Produto
                         on c.ProdutosCodProduto equals f.CodProduto
                    where c.ComprasNrCompra == p.NrCompra && c.ProdutosCodProduto == f.CodProduto
                    select f.Preco;

                StreamWriter ficheiro = new StreamWriter(@"C:Recibo.txt", false, Encoding.Default);
                ficheiro.WriteLine("Itens comprados:");
                foreach (var i in ClienteCompraQuantidade)
                {
                    int preco = Convert.ToInt32(ClienteCompraPreco) * Convert.ToInt32(ClienteCompraQuantidade);

                    precototal = precototal + preco;

                    ficheiro.WriteLine("" +ClienteCompraQuantidade. + "|" + ClienteCompraDesignacao. + "     |" + preco);
                }

标签: c#databaselinqlambda

解决方案


您当前正在写出参与者的LIST(对象),而不是每个单独的参与者。你应该:

 ficheiro.WriteLine(i);

在你的foreach

编辑:

因此,您现在的问题与最初的问题大不相同……但是,您仍然犯了同样的错误。在你的foreach你尝试做这样的事情:

Convert.ToInt32(ClienteCompraPreco)

请注意,这不是ClienteCompraPreco数字。我相信你认为你从上面的 LINQ 查询中得到了一个数字,但你没有。你得到一个of s (——也许每个都是一个)。您不能将 a 转换为数字。想象一下列表是; 那应该转换成什么数字?ListDesignacaoList<Designacao>DesignacaointList[1, 2, 3]

您需要从每个查询中获取一个值(例如,通过.FirstOrDefault(i => i.Designacao)代替.Select(f.Designacao)),或者您需要处理结果Listforeach.


推荐阅读