2012-07-19 29 views
6

Bu kodu linq çözümüne dönüştürmek istiyorum. Ne yapar, bir müşteri koleksiyonuna bakar ve en azından birinin bir orta isme sahip olup olmadığını görür. (Customers.Foreach(x=>x.HasMiddleName==true)... ama aradığım yöntem değil hattını arar: Bu kod sadece bu yüzden böyle bir şey yazmaya çalıştıKoleksiyonda ilk maç

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

alternatif bir çözüm .: arayan linq öğrenmeye çalışıyorum, gayet iyi çalışıyor . Buna dayanarak

+0

Bilginize - Listesinde ForEach yöntemi sadece listenin – cordialgerm

cevap

18

sadece gidecekseniz bir en azından, Enumerable.Any kullanıp kullanamayacağınızı öğrenmek istiyorsanız varsa:

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

İlk eşleştirmeyi öğrenmek istiyorsanız TÖMER, sen MiddleName==true ilk müşteriyi bulmak için Enumerable.First veya Enumerable.FirstOrDefault kullanabilirsiniz: kaynak dizisi boşsa

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

First bir InvalidOperationException atar, FirstOrDefault getiri null oysa eşleşme varsa.

+0

Sorgudan doğru veya yanlış geri dönmek için herhangi bir şekilde kısaltmak olabilir? – user194076

+0

@ user194076: Bir eşleşen müşterinin bulunup bulunmadığını kontrol etmek istiyorsanız 'Any' kullanabilirsiniz. Cevabımı düzenledim. –

1

:

müşteriler bir koleksiyon haline bakar ve en az biri bir orta ada sahip olmadığını görmek Yaptığı şey

.

deneyin

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

Bu sorgu dönüş true en az bir müştri özelliği HasMiddleName = true

+1

Güzel her üyesi verilen işlev yürütür - Herhangi aradığım şeydir. Teşekkürler! – user194076

+6

'Any' bir yüklemi alır, bu yüzden' return Customers.Any (x => x.HasMiddleName); ' –

2
var result = Customers.Where(x=>x.HasMiddleName == true).FirstOrDefault(); 
0

Sen neye ihtiyacınız ulaşmak için aşağıdaki kullanabilirsiniz: Sayım sıfırdan daha ise

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

Yani, Orta ada sahip bazı müşteriler var demektir.

Veya daha iyi performans için size söyleyebiliriz:

bool customerWithMiddleName; 

foreach(Customer cust in Customers) 
{ 
    if(cust.HasMiddleName) 
    { 
    customerWithMiddleName = true; 
    break; 
    } 
} 
+1

Bu, tüm sorguyu yürüttüğünden, yalnızca tek bir öğenin olup olmadığını bilmek için iyi bir fikir değildir. Müşterilerin 1000000 müşteri içerdiğini ve ilkinin bir middlename içerdiğini düşünün. Herhangi bir (cust => cust.HasMiddleName) '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' hemen döndürür; –

+2

Bu, kodun, bir eşleşme bulunduğunda ilk defa kısa devre yapmak yerine, kaç tane doğru öğe olduğunu hesaplamasını gerektirir. Gereksiz pahalı olabilir. Kullanmak daha iyidir.Any(). – StriplingWarrior