使用Linq搜索对象列表中是否存在值

假设我有一个类Customer,它有一个属性FirstName。然后我有一个List<Customer>

LINQ可以用来查找列表中是否有Firstname = 'John'的客户在单个语句中。如何?

449827 次浏览

LINQ定义了一个非常适合解决这个问题的扩展方法:

using System.Linq;
...
bool has = list.Any(cus => cus.FirstName == "John");

确保你引用System.Core.dll,那是LINQ所在的地方。

customerList.Any(x=>x.Firstname == "John")
List<Customer> list = ...;
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John");

如果不存在名字为“john”的客户,则john将为空。

zvolkov的答案是一个完美的找到如果有这样一个客户。如果你之后需要使用客户,你可以这样做:

Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John");
if (customer != null)
{
// Use customer
}

我知道这不是你要问的,但我想我应该先发制人,提出一个后续问题:)(当然,这只找到第一个这样的客户…要找到所有这些,只需使用普通的where子句。)

另一种可能性

if (list.Count(customer => customer.Firstname == "John") > 0) {
//bla
}

使用Linq你有很多可能性,这里有一个不使用lambdas:

//assuming list is a List<Customer> or something queryable...
var hasJohn = (from customer in list
where customer.FirstName == "John"
select customer).Any();

下面这个问题(如何找到一个可能有多个名字的客户)的一个选项:

List<string> names = new List<string>{ "John", "Max", "Pete" };
bool has = customers.Any(cus => names.Contains(cus.FirstName));

或者从CSV的相似列表中检索客户

string input = "John,Max,Pete";
List<string> names = input.Split(',').ToList();
customer = customers.FirstOrDefault(cus => names.Contains(cus.FirstName));

我在发现.Any()之前使用的技术:

var hasJohn = (from customer in list
where customer.FirstName == "John"
select customer).FirstOrDefault() != null;

试试这个,我希望它能帮助你。

 if (lstCustumers.Any(cus => cus.Firstname == "John"))
{
//TODO CODE
}