10

我想将此代码转换为 linq 解决方案。它的作用是查看一组客户,并查看其中至少一个是否有中间名。这段代码工作正常,我只是想学习 linq,所以寻找替代解决方案。:

//Customers - List<Customer>
private bool checkMiddleName()
{
    foreach (Customer i in Customers)
    {
        if (i.HasMiddleName == true)
        {
            return true;
        }
    }
    return false;
}

我试着写一些类似的东西:(Customers.Foreach(x=>x.HasMiddleName==true)... 但看起来这不是我正在寻找的方法。

4

4 回答 4

29

如果您只想知道是否至少有一个,您可以使用Enumerable.Any

bool atLeastOneCustomerWithMiddleName = Customers.Any(c => c.HasMiddleName);

如果您想知道第一个匹配的客户,您可以使用Enumerable.FirstEnumerable.FirstOrDefault找到第一个客户MiddleName==true

var customer = Customers.FirstOrDefault(c => c.HasMiddleName);
if(customer != null)
{
    // there is at least one customer with HasMiddleName == true
}

First 如果源序列为空,则抛出 InvalidOperationException,如果没有匹配则FirstOrDefault返回。null

于 2012-07-19T22:34:16.320 回答
3
var result   = Customers.Where(x=>x.HasMiddleName == true).FirstOrDefault();
于 2012-07-19T22:35:44.527 回答
1

基于此:

它的作用是查看一组客户,并查看其中至少一个是否有中间名。

尝试

return Customers.Where(x => x.HasMiddleName).Any();

true如果至少一个客户拥有该属性,则此查询返回HasMiddleName = true

于 2012-07-19T22:32:57.907 回答
-2

您可以使用以下内容来实现您所需要的:

Customers.Where(cust=> cust.HasMiddleName).Count > 0

因此,如果 Count 大于零意味着您有一些具有中间名的客户。

或者为了获得更好的性能,您可以说:

bool customerWithMiddleName;

foreach(Customer cust in Customers)
{
  if(cust.HasMiddleName)
  {
    customerWithMiddleName = true;
    break;
  }
}
于 2012-07-19T22:41:28.537 回答