2011-01-13 41 views
5

Tôi có nội dung như thế này trong một số List<object> trong đó object chứa Cat, TypeItems.Dữ liệu nhóm và thực hiện các phép tính tổng hợp trong C#

Cat | Type | Items 
-------------------- 
A | P | 3 
A | Q | 4 
A | R | 2 
A | P | 1 
A | Q | 5 
B | P | 2 
B | Q | 1 
B | R | 3 
B | P | 9 

Những gì tôi muốn làm là tính toán các mặt hàng trung bình của các loại để tạo ra một cái gì đó như thế này:

Cat | Type | Items 
-------------------- 
A | P | 2 
A | Q | 4.5 
A | R | 2 
B | P | 5.5 
B | Q | 3 
B | R | 5 

Như bạn có thể thấy các mặt hàng trung bình được tính toán cho các loại Whats cách tốt nhất để làm điều này?

+0

bạn có thể bao gồm một dòng về những gì cấu trúc dữ liệu trông như thế nào? một danh sách các bộ dữ liệu? – vlad

+2

@vlad: Tôi giả sử một đối tượng có ba thuộc tính. – Joey

+0

xin lỗi, có, danh sách loại đối tượng có 3 thuộc tính – flammable11

Trả lời

7

Giả sử đầu vào được cung cấp trong một biến gọi là list loại IEnumerable<Blah> (chứa, ví dụ, một kết quả truy vấn cơ sở dữ liệu, một List<Blah>, một mảng, etc.etc.), Và Blah đó là một lớp học với các lĩnh vực hoặc tài sản gọi Cat, TypeItems:

var result = list.GroupBy(entry => new { entry.Cat, entry.Type }) 
       .Select(group => new { group.Key.Cat, group.Key.Type, 
             Items = group.Average(e => e.Items) }) 
2
class Stuff 
{ 
    public string Cat { get; set; } 
    public string Type { get; set; } 
    public double Items { get; set; } 
} 

static void Main(string[] args) 
{ 
    var list = new List<Stuff>(); 
    list.Add(new Stuff { Cat = "A", Type = "P", Items = 3 }); 
    list.Add(new Stuff { Cat = "A", Type = "Q", Items = 4 }); 
    list.Add(new Stuff { Cat = "A", Type = "R", Items = 2 }); 
    list.Add(new Stuff { Cat = "A", Type = "P", Items = 1 }); 
    list.Add(new Stuff { Cat = "A", Type = "Q", Items = 5 }); 
    list.Add(new Stuff { Cat = "B", Type = "P", Items = 2 }); 
    list.Add(new Stuff { Cat = "B", Type = "Q", Items = 1 }); 
    list.Add(new Stuff { Cat = "B", Type = "R", Items = 3 }); 
    list.Add(new Stuff { Cat = "B", Type = "P", Items = 9 }); 

    var result = from stuff in list 
       group stuff by new { stuff.Cat, stuff.Type } into g 
       select new { Cat = g.Key.Cat, 
           Type = g.Key.Type, 
           AvgItems = g.Average(s => s.Items) }; 

    foreach(var s in result) 
    { 
     Console.WriteLine("{0} | {1} | {2}", s.Cat, s.Type, s.AvgItems); 
    } 
} 
Các vấn đề liên quan