05. september 2013 - 22:32
Der er
3 kommentarer og
1 løsning
Linq Group By - HELP
Jeg kunne virkelig godt bruge løsningen på dette kodeproblem :)
Jeg har "List<OrderItem>" med masser data, og vil gerne lave en Group by på "TypeID" og "MenuID" og så tæller sammen i "Quantity" og udregner "LineTotal = Quantity * Price"
Er her en som er lidt awesome til Linq C# ? :)
public class OrderItem
{
public int ID { get; set; }
public int TypeID { get; set; }
public int MenuID { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public int Quantity { get; set; }
public int LineTotal { get; set; }
}
05. september 2013 - 23:11
#1
Siden du ikke laver GroupBy på price, kan du ikke gøre helt som du skriver, men du kan vist nok gøre sådan her. Burde give det samme hvis prisen er samme for TypeId og MenuID.
List<OrderItem> list = new List<OrderItem>();
var t = list.GroupBy(x => new { x.TypeID, x.MenuID }).Select(t => new {Obj = t, Sum = t.Sum(x => x.Sum(y => y.Quantity * y.Price)});
foreach (var item in t)
{
var groupByKey = item.Obj.Key;
var sum = item.Sum;
}
06. september 2013 - 02:45
#2
A variation:
using System;
using System.Collections.Generic;
using System.Linq;
namespace E
{
public class OrderItem
{
public int ID { get; set; }
public int TypeID { get; set; }
public int MenuID { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public int Quantity { get; set; }
public int LineTotal { get { return Price*Quantity; } } // This is not a real property !!!!
}
public class Program
{
public static void Main(string[] args)
{
List<OrderItem> lst = new List<OrderItem> { new OrderItem { ID = 1, TypeID = 1, MenuID = 1, Name = "A", Price = 100, Quantity = 2 },
new OrderItem { ID = 2, TypeID = 1, MenuID = 1, Name = "A", Price = 100, Quantity = 1 },
new OrderItem { ID = 3, TypeID = 1, MenuID = 2, Name = "C", Price = 50, Quantity = 1 },
new OrderItem { ID = 4, TypeID = 2, MenuID = 1, Name = "D", Price = 75, Quantity = 1 } };
foreach(var o in lst.GroupBy(oi => Tuple.Create(oi.TypeID, oi.MenuID)).Select(g => Tuple.Create(g.Key, g.Sum(oi => oi.Quantity), g.Sum(oi => oi.LineTotal))))
{
Console.WriteLine("{0} {1} {2} {3}", o.Item1.Item1, o.Item1.Item2, o.Item2, o.Item3);
}
Console.ReadKey();
}
}
}