Penerangan Masalah
Anda mempunyai satu set data produk yang perlu dibungkus mengikut kod produk. Untuk setiap kod, anda ingin mengembalikan objek yang termasuk nama produk, kuantiti produk dan jumlah harga. Anda menggunakan Fungsi GroupBy dan SelectMany Linq untuk mencapai matlamat ini, tetapi sifat -sifat kuantitatif dalam objek hasilnya selalu 1.
penyelesaian
Masalahnya ialah fungsi SelectMany digunakan untuk mengendalikan setiap item dalam setiap kumpulan. Untuk menyelesaikan masalah ini, gunakan Pilih sebaliknya.
alternatif
<code class="language-csharp">List<resultline> result = Lines .GroupBy(l => l.ProductCode) .Select(cl => new ResultLine { ProductName = cl.First().Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), }) .ToList();</code>
Jenis data yang lebih baik
Pertimbangkan perubahan kuantiti dan sifat harga kepada int dan perpuluhan, kerana ini dapat mencerminkan sifat nilai -nilai ini dengan lebih baik.
<code class="language-csharp">List<resultline> result = Lines .GroupBy(l => new { l.ProductCode, l.Name }) .Select(cl => new ResultLine { ProductName = cl.First().Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), }) .ToList();</code>
Atas ialah kandungan terperinci Bagaimana cara menggunakan Linq's Groupby, Sum, dan Hitung untuk mengagregatkan data produk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!