2013-04-22 63 views
6

Tôi có cơ sở dữ liệu quốc thích,Cách sử dụng "Chứa" trong Danh sách?

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

tôi nhận được nguồn dữ liệu này như,

DB.Countries.ToList(); 

Những gì tôi muốn làm là để kiểm tra nước bổ sung mới là đã tồn tại hay không,
chỉ thích ,

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

Nhưng tôi không biết cách chuyển đổi newAddedCountry (chuỗi) thành System.Collections.Generic.List<Country>.

+0

cung cấp cấu trúc bảng – Satpal

+3

Lưu ý rằng 'ToList' phải là statemenet cuối cùng vì nó tải truy vấn vào bộ nhớ. Xem xét một bảng với hàng triệu bản ghi, bạn sẽ tải tất cả vào bộ nhớ trước khi bạn bắt đầu lọc hoặc sắp xếp chúng. Tất cả trước khi có thể được tối ưu hóa bởi rdbms. –

Trả lời

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

Cảm ơn bạn rất nhiều mister :) – zey

6

Bạn có thể sử dụng phương pháp Enumerable.Any;

Xác định xem chuỗi có chứa bất kỳ phần tử nào không.

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

@Downvoters chăm sóc bình luận? –

2

Bạn có thể so sánh Tên của đất nước chống lại tài sản của mình trong Country lớp. Một cái gì đó như:

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

nếu bạn muốn so sánh chuỗi trường hợp bỏ qua sau đó:

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

Hãy thử một cái gì đó như thế này

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

Đây có thể là dễ dàng hơn để chỉ cần sử dụng một tài sản của lớp Country của bạn thay vào đó, như vậy:

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

hoặc

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

hiệu quả hơn.

1

Giả sử Country như tên cột:

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

Nếu tôi nhớ không nhầm này, chứa công dụng Bằng phương pháp để so sánh trường hợp. Vì vậy, bạn cần triển khai phương thức ghi đè Bằng trong lớp Quốc gia của bạn. Và theo bất kỳ cách nào - bạn đang cố gắng so sánh thể hiện đối tượng của chuỗi và quốc gia, do đó, ofcourse chúng không được so sánh đúng cách.

Tôi muốn thử đi cho giải pháp LINQ:

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

hoặc x == newAddedCountry nếu nó chỉ là một danh sách.

Các vấn đề liên quan