2013-04-22 7 views
6

Ho banca dati paese ama,Come usare "Contenere" in Lista?

Country 
------- 
England 
Germany 
Italy 
... 

ho questa fonte di dati come,

DB.Countries.ToList(); 

Quello che voglio fare è controllare paese nuovo aggiunto è già esiste o no,
piace solo ,

if(DB.Countries.ToList().Contains(newAddedCountry)) 
{ 
.............. 
} 

Ma io non so come convertire newAddedCountry (stringa) per System.Collections.Generic.List<Country>.

+0

fornire la struttura della tabella – Satpal

+3

Si noti che 'ToList' deve essere l'ultimo set di dati dal momento che carica la query in memoria. Prendi in considerazione una tabella con milioni di record, caricheresti tutto in memoria prima di iniziare a filtrarli o ordinarli. Tutto prima può essere ottimizzato da rdbms. –

risposta

14
if(DB.Countries.Any(c => c.Country == newAddedCountry)) 
{ 
    // exists .. 
} 
+5

Grazie mille signore :) – zey

6

È possibile utilizzare il metodo Enumerable.Any;

Determina se una sequenza contiene elementi.

if(DB.Countries.Any(n => n.Country == newAddedCountry)) 
+0

@Downvoters cura di commentare? –

2

È possibile confrontare il nome del paese contro la vostra proprietà in Country di classe. Qualcosa di simile:

if(DB.Countries.ToList().Any(r=> r.Name == newAddedCountry)) 
           ^^^^^^ 
           Field/Property name holding the Name of Country 

se si desidera confrontare caso ignorare stringa, allora:

if(DB.Countries.ToList() 
       .Any(r=> r.Name.Equals(newAddedCountry, StringComparison.InvariantCultureIgnoreCase)) 
4

provare qualcosa di simile

if(DB.Countries.Any(c => c.CountryName == newAddedCountry.CountryName)) 
{ 
    // exists .. 
} 
1

E 'probabilmente più facile usare solo una proprietà della classe Country invece, in questo modo:

if (db.Countries.Select(x => x.Name).ToList().Contains(countryName)) 
{ 
    ... 
} 

o

if (db.Countries.Any(x => x.Name == countryName)) 
{ 
    ... 
} 

che è più efficiente.

1

Assumendo Country come nome della colonna:

if(DB.Countries.ToList().Any(c => c.Country == newAddedCountry)) 
{ 
    //Do something 
} 
0

Se non ricordo questo diritto, contiene usi Equals metodo per confrontare le istanze. Quindi dovresti implementare un metodo di sovrascrittura equals nella tua classe Countries. E in ogni caso - stai provando a confrontare l'istanza di oggetto String e Paesi, quindi naturalmente non sono comparabili correttamente.

mi piacerebbe provare ad andare per soluzione LINQ:

List<Country> countries = DB.Countries.ToList(); 
if (countries.Any(x => x.column == newAddedCountry)) { 
    ... 
} 

o x == newAddedCountry se è solo un elenco.

Problemi correlati