【发布时间】:2009-07-01 19:58:04
【问题描述】:
假设我有一个类Customer,它有一个属性FirstName。然后我有一个List<Customer>。
可以使用 LINQ 来查找列表中是否有一个客户在单个语句中使用 Firstname = 'John'.. 怎么样?
【问题讨论】:
假设我有一个类Customer,它有一个属性FirstName。然后我有一个List<Customer>。
可以使用 LINQ 来查找列表中是否有一个客户在单个语句中使用 Firstname = 'John'.. 怎么样?
【问题讨论】:
LINQ 定义了一个非常适合解决这个确切问题的扩展方法:
using System.Linq;
...
bool has = list.Any(cus => cus.FirstName == "John");
确保引用 System.Core.dll,这是 LINQ 所在的位置。
【讨论】:
zvolkov 的回答是找出如果有这样的客户的完美答案。如果您之后需要使用客户,您可以这样做:
Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John");
if (customer != null)
{
// Use customer
}
我知道这不是你要问的,但我想我会先发制人提出后续问题 :) (当然,这只会找到第一个这样的客户.. . 要找到所有这些,只需使用普通的where 子句。)
【讨论】:
bool 结果,所以在这种情况下.Any 或.FindIndex 使用here 这很快 ?
以下问题的一个选项(如何找到可能有任意多个名字的客户):
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));
【讨论】:
使用 Linq 你有很多可能性,这里有一种不使用 lambdas:
//assuming list is a List<Customer> or something queryable...
var hasJohn = (from customer in list
where customer.FirstName == "John"
select customer).Any();
【讨论】:
customerList.Any(x=>x.Firstname == "John")
【讨论】:
我在发现.Any()之前使用的技术:
var hasJohn = (from customer in list
where customer.FirstName == "John"
select customer).FirstOrDefault() != null;
【讨论】:
List<Customer> list = ...;
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John");
如果不存在名字为“John”的客户,john 将为空。
【讨论】:
试试这个,希望对你有帮助。
if (lstCustumers.Any(cus => cus.Firstname == "John"))
{
//TODO CODE
}
【讨论】:
另一种可能性
if (list.Count(customer => customer.Firstname == "John") > 0) {
//bla
}
【讨论】: