Tôi có một bộ sưu tập các sản phẩm
public class Product {
public Product() { }
public string ProductCode {get; set;}
public decimal Price {get; set; }
public string Name {get; set;}
}
Bây giờ tôi muốn nhóm bộ sưu tập dựa trên mã sản phẩm và trả về một đối tượng có chứa tên, số hoặc sản phẩm cho mỗi mã và tổng giá cho mỗi sản phẩm.
public class ResultLine{
public ResultLine() { }
public string ProductName {get; set;}
public string Price {get; set; }
public string Quantity {get; set;}
}
Vì vậy, tôi sử dụng GroupBy để nhóm theo ProductCode, sau đó tôi tính tổng và cũng đếm số lượng bản ghi cho mỗi mã sản phẩm.
Đây là những gì tôi có cho đến nay:
List<Product> Lines = LoadProducts();
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>();
Vì một số lý do, tổng được thực hiện chính xác nhưng số luôn luôn là 1.
Dữ liệu sampe:
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" });
Kết quả với dữ liệu mẫu:
Product1: count 1 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Sản phẩm 1 nên có số lượng = 2!
Tôi đã cố gắng mô phỏng điều này trong một ứng dụng giao diện điều khiển đơn giản nhưng ở đó tôi nhận được kết quả như sau:
Product1: count 2 - Price:13 (2x6.5)
Product1: count 2 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Sản phẩm1: chỉ nên được liệt kê một lần ... Mã cho những điều trên có thể được tìm thấy trên pastebin: http://pastebin.com/cNHTBSie