2011-09-18 16 views
7

ho un Class:LINQ - ottenere conteggio totale dei valori dalla lista nidificato

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

e ho un Generic List che contiene che Class:

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

voglio fare due cose :

  1. ottenere un distinto elenco delle categorie
  2. ottenere un conteggio totale di aziende per categoria

Credo di essere riuscito alla prima cosa:

Companies.SelectMany(c => c.categories).Distinct() prego di dirmi se si pensa tutto è sbagliato in questo.

ho provato il secondo passo in questo modo: Companies.SelectMany(c => c.categories).Where(c=>c == Category).Count() ma non sono sicuro che sia davvero giusto.

risposta

5
  1. corretta

  2. È necessario appiattire l'elenco in (ditta, categoria) coppie, poi gruppo per categoria:

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

    EDIT: Se si desidera scopri quante aziende ci sono in una singola categoria, puoi scrivere

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

una società può avere più di 1 categoria, cioè il numero di cui ho bisogno, quante aziende sono in una categoria specifica – Dementic

+0

@Demetic: Vedi la mia modifica – SLaks

+0

mi dà ancora gli stessi risultati che ho scritto sul commento di Hasan. – Dementic

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

se lo vuoi per la categoria specifica allora la query è corretta già.

+0

si prega di consultare la domanda modificata. – Dementic

+0

@Dementic la mia risposta ti dà quello che vuoi. Provalo –

+0

bene, dato che ho bisogno di specificare la categoria, non penso che lo faccia. – Dementic

Problemi correlati