2008-10-28 36 views
8

Tôi đang chơi với các công cụ mới của C# 3.0 và tôi có mã này (chủ yếu là lấy từ MSDN) nhưng tôi chỉ có thể có được đúng, sai, đúng ... và không phải là giá trị thực:Linq/lambda câu hỏi về .Chọn (newby learning 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); 
     } 

Làm cách nào để sửa danh sách số nguyên?

+0

Có vẻ n% 2 == 1 không liên quan gì đến số <5? –

Trả lời

25

Thay đổi của bạn "Chọn" sang "ở đâu"

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); 
    } 

"Chọn" phương pháp là tạo ra một danh sách mới của kết quả lambda cho mỗi phần tử (true/false). Phương thức "Where" được lọc dựa trên lambda.

Trong C#, bạn cũng có thể sử dụng cú pháp này, bạn có thể thấy rõ ràng hơn:

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

mà trình biên dịch dịch để:

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

Thx nó hoạt động, Chọn gì nếu nó không chọn dữ liệu? –

+1

Nó sẽ chọn dữ liệu. Nó chọn kết quả của lambda của bạn - đó là một giá trị boolean. – TheSoftwareJedi

+0

thx !! Giờ thì tôi đã hiểu. –

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

Thay đổi này để

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

Lựa chọn nào là "chuyển đổi" một thứ sang một điều khác. Vì vậy, trong trường hợp này, đó là "Chuyển đổi" n thành "n% 2 == 1" (là một boolean) - do đó bạn nhận được tất cả các sự thật và sai.

Nó thường được sử dụng để nhận các thuộc tính về mọi thứ. Ví dụ, nếu bạn đã có một danh sách các Person đối tượng, và bạn muốn để có được tên của họ, bạn sẽ làm

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

Bạn có thể nghĩ về điều này như sau:

  • Chuyển đổi danh sách những người vào một danh sách các chuỗi, sử dụng phương pháp sau: (p => p.Name)

Để "chọn" (trong ý nghĩa "lọc" của từ) một tập hợp con của bộ sưu tập, bạn cần sử dụng Ở đâu .

Cảm ơn Microsoft đã đặt tên khủng khiếp

+0

Đặt tên khủng khiếp? "Chọn" đang chọn, "Vị trí" đang lọc. Giống như SQL ... – TheSoftwareJedi

+0

Vâng, giống như SQL, nhưng khác với mọi ngôn ngữ lập trình khác (ruby, lisp, python, v.v.) sử dụng bản đồ cho 'select' và chọn 'where' –

+0

Thx để biết thông tin về Chọn. –