using System; using System.Linq; using System.Collections.Generic;
public class Test
{
public static void Main()
{
var Products = new List<Product>
{
new Product { Name = "XXXVVVXXXX", Category = "Category1", Price = 10 },
new Product { Name = "YYYY", Category = "Category2", Price = 5 },
new Product { Name = "XXYZXXXXXX", Category = "Category1", Price = 15 },
new Product { Name = "YYVV", Category = "Category2", Price = 10 },
new Product { Name = "TTTT", Category = "Category2", Price = 11 }
};
var query =
from p in Products
group p by p.Category into g
select new { Category = g.Key, Total = g.Sum(p => p.Price), Values = g };
foreach (var g in query) {
foreach (Product p in g.Values) {
Console.WriteLine("{0}\t|\t{1}\t|\t{2}", p.Name, p.Category, p.Price);
}
Console.WriteLine("Total {0}:\t{1}", g.Category, g.Total);
}
}
}
class Product
{
public string Name { get; set; }
public string Category { get; set; }
public int Price { get; set; }
}
dXNpbmcgU3lzdGVtOyB1c2luZyBTeXN0ZW0uTGlucTsgdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIFByb2R1Y3RzID0gbmV3IExpc3Q8UHJvZHVjdD4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV3IFByb2R1Y3QgeyBOYW1lID0gIlhYWFZWVlhYWFgiLCBDYXRlZ29yeSA9ICJDYXRlZ29yeTEiLCBQcmljZSA9IDEwIH0sCiAgICAgICAgICAgICAgICBuZXcgUHJvZHVjdCB7IE5hbWUgPSAiWVlZWSIsICAgICAgIENhdGVnb3J5ID0gIkNhdGVnb3J5MiIsIFByaWNlID0gNSB9LAogICAgICAgICAgICAgICAgbmV3IFByb2R1Y3QgeyBOYW1lID0gIlhYWVpYWFhYWFgiLCBDYXRlZ29yeSA9ICJDYXRlZ29yeTEiLCBQcmljZSA9IDE1IH0sCiAgICAgICAgICAgICAgICBuZXcgUHJvZHVjdCB7IE5hbWUgPSAiWVlWViIsICAgICAgIENhdGVnb3J5ID0gIkNhdGVnb3J5MiIsIFByaWNlID0gMTAgfSwKICAgICAgICAgICAgICAgIG5ldyBQcm9kdWN0IHsgTmFtZSA9ICJUVFRUIiwgICAgICAgQ2F0ZWdvcnkgPSAiQ2F0ZWdvcnkyIiwgUHJpY2UgPSAxMSB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgIHZhciBxdWVyeSA9CiAgICAgICAgCWZyb20gcCBpbiBQcm9kdWN0cwogICAgICAgIAlncm91cCBwIGJ5IHAuQ2F0ZWdvcnkgaW50byBnCiAgICAgICAgCXNlbGVjdCBuZXcgeyBDYXRlZ29yeSA9IGcuS2V5LCBUb3RhbCA9IGcuU3VtKHAgPT4gcC5QcmljZSksIFZhbHVlcyA9IGcgfTsKICAgICAgICAJCiAgICAJZm9yZWFjaCAodmFyIGcgaW4gcXVlcnkpIHsKICAgIAkJZm9yZWFjaCAoUHJvZHVjdCBwIGluIGcuVmFsdWVzKSB7CiAgICAJCQlDb25zb2xlLldyaXRlTGluZSgiezB9XHR8XHR7MX1cdHxcdHsyfSIsIHAuTmFtZSwgcC5DYXRlZ29yeSwgcC5QcmljZSk7CiAgICAJCX0KICAgIAkJQ29uc29sZS5Xcml0ZUxpbmUoIlRvdGFsIHswfTpcdHsxfSIsIGcuQ2F0ZWdvcnksIGcuVG90YWwpOwogICAgCX0KICAgICAgICAKCX0KfQoKY2xhc3MgUHJvZHVjdAp7CiAgICBwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIHN0cmluZyBDYXRlZ29yeSB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgaW50IFByaWNlIHsgZ2V0OyBzZXQ7IH0KfQo=