2008-10-28 16 views
8

C# 3.0'ın yeni öğeleriyle oynuyorum ve bu kodu aldım (çoğunlukla MSDN'dan alınmıştır) ancak doğru, yanlış, doğru olabilir ... ve gerçek değer değil:Linq/lambda hakkında soru .Select (newby öğrenim 3.0)

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

     var oddNumbers = numbers.Select(n => n % 2 == 1); 

     Console.WriteLine("Numbers < 5:"); 
     foreach (var x in oddNumbers) 
     { 
      Console.WriteLine(x); 
     } 

Tamsayıların listesini göstermek için bunu nasıl düzeltebilirim?

+0

n% 2 == 1 Numaraları <5 ile ilgisi yoktur görünüyor? –

cevap

25
bir "Seç" yöntemi her element için lambda sonucun yeni bir liste yaratıyor "Nerede"

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

    var oddNumbers = numbers.Where(n => n % 2 == 1); 

    Console.WriteLine("Odd Number:"); 
    foreach (var x in oddNumbers) 
    { 
     Console.WriteLine(x); 
    } 

(doğru/yanlış) için "Seç" senin değiştirin

. "Nerede" yöntemi lambdaya göre filtreleniyor.

C#

, ayrıca bulabilir bu sözdizimini, kullanabilirsiniz net: için

var oddNumbers = numbers.Where(n => n % 2 == 1).Select(n => n); 
+0

Thx çalışıyor, veri seçmiyorsa ne için seçilir? –

+1

Verileri seçer. Lambda'nızın sonucunu seçiyor - bu bir boole değeridir. – TheSoftwareJedi

+0

thx !! Şimdi anladım. –

5
numbers.Select(n => n % 2 == 1); 

Değişikliği bu: derleyici çevirir

 var oddNumbers = from n in numbers 
         where n % 2 == 1 
         select n; 

Seçme, bir şeyi diğerine "dönüştürür". Yani bu durumda, "dönüştürme" n "n% 2 == 1" (bu bir boole) demektir - dolayısıyla tüm gerçekleri ve falsları elde edersiniz.

Genelde işler hakkında bilgi almak için kullanılır.

  • içine kişilerin listesini dönüştürme: Örneğin

    var listOfNames = listOfPeople.Select(p => p.Name); 
    

    Öyle gibi bu aklınıza gelebilecek yapardım, sen Person nesnelerin listesini vardı ve isimlerini almak istiyorsa aşağıdaki yöntemi kullanarak bir dize listesidir:

bir koleksiyon bir alt kümesi (kelimenin "filtreleme" anlamda) "seçeneğini" Kime (p => p.Name) nerede kullanmak gerekir .

Teşekkür Microsoft adlandırma korkunç için

+0

Korkunç isimlendirme? "Seç", "Nerede" filtrelemeyi seçiyor. SQL ile aynı ... – TheSoftwareJedi

+0

Evet, SQL ile aynıdır, fakat 'select' için harita kullanan ve 'nerede' için –

+0

Thx'i seçen diğer programlama dillerine (ruby, lisp, python, vb.) Farklı Seç. –