Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara menggunakan Linq's Groupby, Sum, dan Hitung untuk mengagregatkan data produk?

Bagaimana cara menggunakan Linq's Groupby, Sum, dan Hitung untuk mengagregatkan data produk?

Linda Hamilton
Linda Hamiltonasal
2025-01-24 16:56:13289semak imbas

How to Correctly Use LINQ's GroupBy, Sum, and Count to Aggregate Product Data?

linq: groupby, sum, dan count

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>
atau, anda boleh mengumpulkan nama produk dan kod produk pada masa yang sama. Ini boleh dijana dalam EF untuk menjana SQL yang lebih baik:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn