2011-09-18 31 views
7

tôi có một Class:LINQ - nhận tổng số các giá trị từ danh sách lồng nhau

public class Company 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    public string address { get; set; } 
    public string city { get; set; } 
    public string zip { get; set; } 
    public List<string> phones { get; set; } 
    public List<string> categories { get; set; } 
} 

và tôi đã một Generic List chứa rằng Class:

public List<Company> Companies = new List<Company>();

tôi muốn làm hai việc :

  1. có danh sách riêng biệt của các danh mục
  2. có được một tổng số các công ty mỗi loại

tôi nghĩ rằng tôi quản lý đến điều đầu tiên:

Companies.SelectMany(c => c.categories).Distinct() xin vui lòng cho tôi biết nếu bạn nghĩ bất cứ điều gì là sai với điều đó.

tôi đã thử bước thứ hai như sau: Companies.SelectMany(c => c.categories).Where(c=>c == Category).Count() nhưng không chắc chắn điều đó thực sự đúng.

Trả lời

5
  1. Đúng

  2. Bạn cần phải san bằng danh sách thành (công ty, thể loại) cặp, sau đó nhóm theo thể loại:

    from company in Companies 
    from category in company.Categories 
    group company by category into g 
    select new { Category = g.Key, Count = g.Count() } 
    

    EDIT: Nếu bạn muốn tìm hiểu xem có bao nhiêu công ty thuộc một danh mục cụ thể, bạn có thể viết

    Companies.Count(c => c.Categories.Contains(categoryName)) 
    
+0

một công ty có thể có nhiều hơn 1 danh mục, đó là số mà tôi cần, số lượng công ty thuộc một danh mục cụ thể – Dementic

+0

@Demetic: Xem chỉnh sửa của tôi – SLaks

+0

nó vẫn mang lại cho tôi kết quả tương tự như tôi đã viết trên bình luận của Hasan. – Dementic

3
Companies 
    .SelectMany(c => c.categories) 
    .GroupBy(c => c) 
    .Select(g => new 
     { 
      Cateogry = g.Key, 
      Count = g.Count() 
     }); 

Nếu bạn muốn nó cho loại cụ thể sau đó truy vấn của bạn là đúng rồi.

+0

vui lòng xem câu hỏi đã chỉnh sửa. – Dementic

+0

@Dementic câu trả lời của tôi cung cấp cho bạn những gì bạn muốn. Hãy thử nó ra –

+0

tốt, vì tôi cần phải xác định các thể loại, tôi không nghĩ rằng nó. – Dementic

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