2011-09-18 13 views
7

から値の合計数を取得ClassLINQは - 私が持っているネストされたリスト

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; } 
} 

と私はClassことGeneric Listが含まれています:

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

が、私は二つのことをやりたいです:

  1. カテゴリの別リストを取得
  2. カテゴリ

あたりの企業の合計数を取得する私は私が最初に管理すると思う:あなたは何もそれと間違っていると思うなら、私に教えてください

Companies.SelectMany(c => c.categories).Distinct()

私は次のように2番目の手順を試しました。 Companies.SelectMany(c => c.categories).Where(c=>c == Category).Count() しかし、本当に正しいかどうかはわかりません。あなたがしたい場合は、次の

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

EDIT:あなたがカテゴリ別にグループそして、(会社、カテゴリ)のペアにリストを平らにする必要が

答えて

5
  1. 正しい

  2. 1つのカテゴリに属する​​企業数を確認してください。

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

会社には1つのカテゴリ、つまり必要な数、特定のカテゴリに属する​​会社の数があります。 – Dementic

+0

@Demetic:編集を参照してください – SLaks

+0

私はHasanのコメントに書いたのと同じ結果を返します。 – Dementic

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

あなたが特定のカテゴリのためにそれをしたい場合は、あなたのクエリは、すでに正しいです。

+0

編集した質問をご覧ください。 – Dementic

+0

@Dementic私の答えはあなたが望むものを与えます。私がCategoryを指定する必要があるので、 –

+0

を試してみてください。 – Dementic

関連する問題