如何在列表中使用“包含”?
我有国家数据库喜欢,如何在列表中使用“包含”?
Country
-------
England
Germany
Italy
...
我得到这个数据源作为,
DB.Countries.ToList();
我想要做的是检查新加入的国家是已经存在与否,
只是喜欢,
if(DB.Countries.ToList().Contains(newAddedCountry))
{
..............
}
但我不知道如何转换newAddedCountry
(字符串)System.Collections.Generic.List<Country>
。
if(DB.Countries.Any(c => c.Country == newAddedCountry))
{
// exists ..
}
多谢先生:) – zey 2013-04-22 11:14:27
@Downvoters关心评论? – 2013-04-22 11:10:48
您可以比较你的财产的国家的名称在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))
尝试是这样的
if(DB.Countries.Any(c => c.CountryName == newAddedCountry.CountryName))
{
// exists ..
}
它可能更容易,只需使用你的Country
类的属性相反,如下所示:
if (db.Countries.Select(x => x.Name).ToList().Contains(countryName))
{
...
}
或
if (db.Countries.Any(x => x.Name == countryName))
{
...
}
这是更有效的。
假设Country
为列名:
if(DB.Countries.ToList().Any(c => c.Country == newAddedCountry))
{
//Do something
}
如果我记得这个权利,包括使用equals方法比较实例。所以你需要在你的Countries类中实现一个Equals覆盖方法。无论如何 - 你试图比较字符串和国家对象实例,所以当然他们没有得到适当的比较。
我会尝试去为LINQ的解决方案:
List<Country> countries = DB.Countries.ToList();
if (countries.Any(x => x.column == newAddedCountry)) {
...
}
或x == newAddedCountry
如果它只是一个列表。
提供表结构 – Satpal 2013-04-22 11:11:58
注意'ToList'应该是最后一个statemenet,因为它将查询加载到内存中。考虑一张包含数百万条记录的表格,在开始过滤或排序之前,您将全部加载到内存中。以前所有可以通过rdbms进行优化。 – 2013-04-22 11:27:33