10

このコードを linq ソリューションに変換したいと考えています。何をするか 一連の顧客を調査し、そのうちの少なくとも 1 人にミドル ネームがあるかどうかを確認します。このコードは正常に動作します。私は 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

少なくとも 1 つあるかどうかを知りたい場合は、次を使用できますEnumerable.Any

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

最初に一致した顧客を知りたい場合は、Enumerable.Firstまたはを使用Enumerable.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

これに基づいて:

何をするか 一連の顧客を調査し、そのうちの少なくとも 1 人にミドル ネームがあるかどうかを確認します。

試す

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

このクエリtrueは、少なくとも 1 人の顧客がプロパティを持っているかどうかを返しますHasMiddleName = true

于 2012-07-19T22:32:57.907 に答える
-2

以下を使用して、必要なものを達成できます。

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

したがって、Count が 0 より大きい場合は、ミドル ネームを持つ顧客が何人かいることを意味します。

または、パフォーマンスを向上させるために、次のように言うことができます。

bool customerWithMiddleName;

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