2013-04-22 11 views
6

Mam bazie kraj lubi,Jak korzystać z "Zawiera" na liście?

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

uzyskać z tego źródła danych jako,

DB.Countries.ToList(); 

Co chcę zrobić, to sprawdzić nowy dodany kraj jest już istnieje, czy nie,
prostu lubi ,

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

Ale nie wiem jak konwertować newAddedCountry (string) do System.Collections.Generic.List<Country>.

+0

Zapewnij strukturę tabeli – Satpal

+3

Pamiętaj, że 'ToList' powinno być ostatnim statemenet od momentu załadowania zapytania do pamięci. Rozważ tabelę z milionami rekordów, załaduj wszystko do pamięci, zanim zaczniesz je filtrować lub zamawiać. Wszystkie wcześniej można zoptymalizować za pomocą rdbms. –

Odpowiedz

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

Bardzo dziękuję panu :) – zey

6

Można użyć metody Enumerable.Any;

Określa, czy sekwencja zawiera jakiekolwiek elementy.

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

@Dvowie komentują troskę o komentarz? –

2

Możesz porównać nazwa kraju wobec nieruchomości w Country klasie. Coś jak:

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

jeśli chcesz porównać ciąg ignorując sprawę wówczas:

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

Spróbuj coś takiego

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

To chyba łatwiej jest po prostu użyć właściwości swojej klasie Country zamiast tego: tak:

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

lub

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

który jest bardziej wydajny.

1

Zakładając Country jako nazwy kolumny:

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

Jeśli dobrze pamiętam to prawo zawiera Równa zastosowania metody porównywania instancji. Więc musisz wprowadzić metodę korekty równości w twojej klasie krajów. I w jakikolwiek sposób - próbujesz porównać instancję obiektu String i country, więc oczywiście nie są one porównywane poprawnie.

chciałbym spróbować iść do sporządzania roztworu LINQ:

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

lub x == newAddedCountry jeśli to tylko liście.

Powiązane problemy