Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara mengumpulkan, jumlah, dan mengira produk dengan betul di Linq dengan Groupby?

Bagaimana cara mengumpulkan, jumlah, dan mengira produk dengan betul di Linq dengan Groupby?

Patricia Arquette
Lepaskan: 2025-01-24 17:01:09
asal
798 orang telah melayarinya

How to Correctly Group, Sum, and Count Products in LINQ with GroupBy?

Kumpulkan, jumlah dan kira produk menggunakan kaedah LINQ: GroupBy

Huraian Masalah

Kami mempunyai koleksi produk yang perlu dikumpulkan mengikut kod produk. Matlamatnya adalah untuk mencipta objek yang mengandungi nama produk, kuantiti produk dan jumlah harga untuk setiap kod produk.

Coretan kod (contoh ralat)

Kod awal menggunakan GroupBy untuk mengumpulkan mengikut kod produk dan kemudian mengira jumlah dan kiraan untuk setiap kumpulan.

<code class="language-csharp">List<resultline> result = Lines
    .GroupBy(l => l.ProductCode)
    .SelectMany(cl => cl.Select(
        csLine => new ResultLine
        {
            ProductName = csLine.Name,
            Quantity = cl.Count().ToString(),
            Price = cl.Sum(c => c.Price).ToString(),
        })).ToList<resultline>();</code>
Salin selepas log masuk

Masalahnya

Walaupun kod ini mengira jumlah dengan betul, kiraan untuk semua produk sentiasa menunjukkan 1.

Contoh data

<code class="language-csharp">List<cartline> Lines = new List<cartline>();
Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });
Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });
Lines.Add(new CartLine() { ProductCode = "p2", Price = 12M, Name = "Product2" });</code>
Salin selepas log masuk

Hasil yang dijangkakan

<code>Product1: count 2   - Price:13 (2x6.5)
Product2: count 1   - Price:12 (1x12)</code>
Salin selepas log masuk

Penyelesaian

Masalahnya ialah menggunakan SelectMany untuk menyemak setiap item dalam setiap kumpulan. Pendekatan yang betul ialah:

<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>
Salin selepas log masuk

Dengan mengandaikan produk dengan kod yang sama mempunyai nama yang sama, kita boleh menggunakan First() untuk mendapatkan nama produk. SelectMany meratakan set hasil, menyebabkan ralat mengira, manakala Select beroperasi secara langsung pada hasil terkumpul.

Jawapan yang disemak ini mengekalkan imej dan memberikan penjelasan yang lebih tepat dan ringkas tentang masalah dan penyelesaian LINQ. Perkataan itu juga dilaraskan untuk kejelasan dan aliran yang lebih baik.

Atas ialah kandungan terperinci Bagaimana cara mengumpulkan, jumlah, dan mengira produk dengan betul di Linq dengan Groupby?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan