2013-04-22 102 views
6

我有国家数据库喜欢,如何在列表中使用“包含”?

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

我得到这个数据源作为,

DB.Countries.ToList(); 

我想要做的是检查新加入的国家是已经存在与否,
只是喜欢,

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

但我不知道如何转换newAddedCountry(字符串)System.Collections.Generic.List<Country>

+0

提供表结构 – Satpal 2013-04-22 11:11:58

+3

注意'ToList'应该是最后一个statemenet,因为它将查询加载到内存中。考虑一张包含数百万条记录的表格,在开始过滤或排序之前,您将全部加载到内存中。以前所有可以通过rdbms进行优化。 – 2013-04-22 11:27:33

回答

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

多谢先生:) – zey 2013-04-22 11:14:27

6

您可以使用Enumerable.Any方法;

确定一个序列是否包含任何元素。

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

@Downvoters关心评论? – 2013-04-22 11:10:48

2

您可以比较你的财产的国家的名称在Country类。喜欢的东西:

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

如果要比较两个字符串,忽略大小写,则:

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

尝试是这样的

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

它可能更容易,只需使用你的Country类的属性相反,如下所示:

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

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

这是更有效的。

1

假设Country为列名:

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

如果我记得这个权利,包括使用equals方法比较实例。所以你需要在你的Countries类中实现一个Equals覆盖方法。无论如何 - 你试图比较字符串和国家对象实例,所以当然他们没有得到适当的比较。

我会尝试去为LINQ的解决方案:

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

x == newAddedCountry如果它只是一个列表。