2009-03-29 34 views
5
class Category 
{   
    public string Name { get; set; } 
    public int Count { get; set;} 
} 


Name Count 
AA 2 
BB 3 
AA 4 

Tôi có một IEnumerable<Category>LINQ tổng

và muốn để có được một danh sách các lĩnh vực có tên duy nhất và tổng của nhiều mục

Output

Name Count 
AA 6 
BB 3 

Cập nhật

class Category 
{ 
public string Name { get; set; } 
public int CountA { get; set;} 
public int CountB { get; set;} 
public string Phone { get; set;} 
} 

Làm cách nào để tổng hợp hai cột. và cột điện thoại có thể là hàng cuối cùng hoặc bất kỳ hàng

Trả lời

1
var foo = new List<Category>() { 
       new Category() { Name = "AA", Count = 2}, 
       new Category() { Name = "BB", Count = 3}, 
       new Category() { Name = "AA", Count = 4} 
      }; 

      var bar = foo.GroupBy(c => c.Name).Select(g => new Category(){ Name = g.Key, Count = g.Sum(c => c.Count) }); 
+0

loại danh mục { chuỗi công khai Tên {get; bộ; } số công cộng CountA {get; set;} countB công khai {get; set;} chuỗi điện thoại công cộng {get; set;} } Làm cách nào để tổng hợp hai cột. và cột điện thoại có thể là hàng cuối cùng hoặc bất kỳ hàng nào –

5

câu hỏi được cập nhật của bạn là không hoàn toàn rõ ràng về số điện thoại, nhưng tôi nghi ngờ bạn muốn một cái gì đó như:

var query = from category in list 
       group category by category.Name into grouped 
       select new { Name = grouped.Key, 
          SumA = grouped.Sum(x => x.CountA), 
          SumB = grouped.Sum(x => x.CountB), 
          Phone = grouped.Last().Phone }; 

Thay đổi grouped.Last() đến grouped.First() sẽ hiệu quả hơn, nhân tiện.

Đánh giá nhiều tập hợp theo cách này không phải là hiệu quả khủng khiếp nói chung. Dự án Push LINQ được phát triển bởi chính tôi và Marc Gravell làm cho nó hiệu quả hơn rất nhiều với chi phí không dễ sử dụng. Bạn có thể muốn xem xét nó nếu bạn cần phải đối phó với rất nhiều dữ liệu.

Các vấn đề liên quan