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

Ton*_*ich 217 c# linq

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

可以使用LINQ来查找列表中是否有一个客户在一个语句中使用Firstname ='John'..怎么样?

zvo*_*kov 437

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

using System.Linq;
...
    bool has = list.Any(cus => cus.FirstName == "John");
Run Code Online (Sandbox Code Playgroud)

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

  • 任何都很好,我想知道有多少开发人员使用Count时应该使用Any? (20认同)
  • 您还可以进行不区分大小写的搜索:cus => cus.FirstName.Equals("John",StringComparison.CurrentCultureIgnoreCase) (12认同)
  • 因为并非所有集合都具有Exists,并且它不采用lambda表达式,而是我们正在寻找的对象. (5认同)
  • 我知道这是一个老问题,但为什么我们不使用 Exists 方法呢?观察是为了观察事物是否存在。 (2认同)

Jon*_*eet 100

zvolkov的答案是一个完美的答案,以确定是否有这样的客户.如果您之后需要使用客户,您可以:

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

我知道这不是你问的问题,但我认为我会抢先一个后续问题:)(当然,这只找到第一个这样的客户......找到所有这些,只需使用一个正常where条款.)

  • 我要指出,如果您发现自己突然好奇哪个客户符合标准,您可能会对以后在调试方面做到这一点表示赞赏. (7认同)

Mik*_*ton 23

关注问题的一个选项(如何找到可能有任意名字的客户):

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

或者从类似列表的csv中检索客户

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


jms*_*era 10

使用Linq你有很多可能性,这里没有使用lambdas:

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


Chr*_*sma 5

customerList.Any(x=>x.Firstname == "John")
Run Code Online (Sandbox Code Playgroud)