2013-10-23 26 views
25

Ho creato un Web Api in VS 2012. Sto cercando di ottenere tutto il valore da una colonna "Categoria", ovvero tutto il valore univoco, non voglio il valore lista da restituire con i duplicati.Seleziona tutti i valori distinti in una colonna utilizzando LINQ

Ho utilizzato questo codice per ottenere prodotti in una particolare categoria. Come posso ottenere un elenco completo di categorie (Tutti i valori univoci nella colonna Categoria)?

public IEnumerable<Product> GetProductsByCategory(string category) 
    { 
     return repository.GetAllProducts().Where(
      p => string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase)); 
    } 
+0

la tua domanda non mi è chiaro, quando si ottiene 'prodotti category', naturalmente il' 'dei prodotti avete ottenuto dovrebbe avere lo stesso' category', ciò che è distinto qui? –

+0

Sì, questo codice è stato utilizzato per ottenere prodotti da una categoria specificata, ma vorrei modificarlo per ottenere l'elenco completo delle categorie. GetCatgoriesList(). La categoria è una colonna nella tabella del prodotto, pertanto nella colonna saranno presenti valori duplicati in relazione a ciascun prodotto. Voglio l'elenco delle categorie che vengono utilizzate per classificare i prodotti nella tabella. – Tester

+2

Se è così, la risposta sotto dovrebbe funzionare, ma con una nota che il risultato di ritorno è un 'IEnumerable ' che puoi scorrere per stampare l'elenco completo di' Categorie distinte'. –

risposta

41

Per avere categorie uniche:

var uniqueCategories = repository.GetAllProducts() 
            .Select(p=>p.Category) 
            .Distinct(); 
+0

Ho provato questo ma ottengo un errore di compilazione: Impossibile convertire implicitamente il tipo 'System.Collections.Generic.IEnumerable ' in 'System.Collections.Generic.IEnumerable '. Esiste una conversione esplicita (ti manca un cast?) – Tester

+0

@Tester Vedi King King commenta la domanda – Alireza

9
var uniq = allvalues.GroupBy(x => x.Id).Select(y=>y.First()).Distinct(); 

Facile e semplice

+0

Questo metodo sembra essere migliore quando si lavora con Ienumerables/Lists. Questo ha funzionato per me: var details = allDetails .Where (x => x.EmpId == 100) .GroupBy (x => x.SaleDate) .Select (y => y.First()). Distinct() ; –

1

devo trovare righe distinte con i seguenti dati classe: sCountry
colonne: countryID, COUNTRYNAME , isactive
Non c'è una chiave primaria in questo. Sono riuscito con le query followin

public DbSet<SCountry> country { get; set; } 
    public List<SCountry> DoDistinct() 
    { 
     var query = (from m in country group m by new { m.CountryID, m.CountryName, m.isactive } into mygroup select mygroup.FirstOrDefault()).Distinct(); 
     var Countries = query.ToList().Select(m => new SCountry { CountryID = m.CountryID, CountryName = m.CountryName, isactive = m.isactive }).ToList(); 
     return Countries; 
    } 
Problemi correlati