Bộ lọc là một biểu thức Boolean. Người ta thường sử dụng biến phạm vi ở một nơi mà các điều khoản để lọc các đối tượng trong nguồn dữ liệu. Bởi vì các khách hàng trong ví dụ này là loại khách hàng, bạn sử dụng một trong các thuộc tính của nó, trong trường hợp này FirstName, để áp dụng bộ lọc cho truy vấn của bạn. Tất nhiên, bạn có thể sử dụng bất kỳ biểu thức Boolean như bộ lọc của bạn. Ví dụ, bạn có thể gọi phương thức String.StartsWith() để bộ lọc khách bằng chữ cái đầu của tên cuối của họ:nơi khách hàng. LastName.StartsWith("G") bạn cũng có thể sử dụng biểu thức tổng hợp để xây dựng các truy vấn phức tạp hơn. Ngoài ra, bạn có thể sử dụng lồng nhau truy vấn mà là kết quả của một truy vấn (query bên trong) được sử dụng để lọc một truy vấn (query bên ngoài).Phép chiếu (hoặc chọn) phần cuối của một truy vấn LINQ là khoản lựa chọn (gọi đến cơ sở dữ liệu geeks là "chiếu"), mà xác định (hoặc dự án) các kết quả:chọn khách hàng; Trong ví dụ này, các truy vấn trả lại khách hàng các đối tượng mà đáp ứng các điều kiện truy vấn. Bạn có thể cố định mà các lĩnh vực dự án, nhiều càng tốt, bạn sẽ cùng với SQL. Ví dụ, bạn có thể trở lại chỉ các khách hàng đủ điều kiện địa chỉ email chỉ: chọn khách hàng. EmailAddress;Chậm truy vấn đánh giá LINQ thực hiện truy vấn chậm đánh giá, có nghĩa rằng các khai báo và khởi tạo một biểu thức truy vấn không thực sự thực hiện các truy vấn. Thay vào đó, một truy vấn LINQ là thực hiện, hoặc đánh giá, khi bạn iterate qua kết quả truy vấn:foreach (khách hàng khách hàng về kết quả) Console.WriteLine (khách hàng. ToString()); Bởi vì các truy vấn trả về một bộ sưu tập của các đối tượng khách hàng, thay đổi lặp đi lặp lại là một thể hiện của lớp khách hàng. Bạn có thể sử dụng nó như bạn sẽ bất kỳ đối tượng khách hàng. Ví dụ này chỉ đơn giản gọi phương thức ToString() từng đối tượng khách hàng để đầu ra của nó giá trị tài sản để giao diện điều khiển. Mỗi lần bạn iterate qua này foreach loop, truy vấn sẽ được reevaluated. Nếu nguồn dữ liệu đã thay đổi giữa các vụ xử tử, kết quả sẽ khác nhau. Điều này được thể hiện trong phần mã tiếp theo:khách hàng [3]. FirstName = "Donna"; Ở đây, bạn thay đổi tên của khách hàng "Janet Gates" để "Donna" và sau đó lặp thông qua kết quả một lần nữa:Console.WriteLine ("FirstName == "Donna "(có hai)");foreach (khách hàng khách hàng về kết quả) Console.WriteLine (khách hàng. ToString()); Như được hiển thị ở đầu ra mẫu, bạn có thể thấy rằng kết quả bây giờ bao gồm Donna Gates là tốt. Trong hầu hết trường hợp, đánh giá các truy vấn chậm là mong muốn bởi vì bạn muốn có được các dữ liệu gần đây nhất trong nguồn dữ liệu mỗi khi bạn chạy truy vấn. Tuy nhiên, nếu bạn muốn bộ nhớ cache kết quả vì vậy mà nó có thể được xử lý sau đó mà không cần phải reexecute các truy vấn, bạn có thể gọi ToList() hoặc phương pháp ToArray() để lưu một bản sao của kết quả. Ví dụ 13-2 thể hiện kỹ thuật này.Ví dụ 13-2. Một truy vấn LINQ đơn giản với lưu trữ kết quảsử dụng hệ thống; bằng cách sử dụng System.Collections.Generic; bằng cách sử dụng System.Linq; không gian tên Programming_CSharp {/ / lớp khách hàng đơn giản khu vực lớp khách hàng {/ / tương tự như trong ví dụ 13-1} Chương trình chính công cộng lớp Tester {tĩnh void Main() {danh sách khách hàng = CreateCustomerList(); Tìm khách hàng của tên đầu tiên IEnumerable kết quả = từ khách hàng khách hàng nơi khách hàng. FirstName == "Donna" chọn khách hàng; Danh sách cachedResult = kết quả. ToList(); Console.WriteLine ("FirstName == "Donna ""); foreach (khách hàng khách hàng trong cachedResult) Console.WriteLine (khách hàng. ToString()); khách hàng [3]. FirstName = "Donna"; Console.WriteLine ("FirstName == "Donna "(có hai)"); foreach (khách hàng khách hàng trong cachedResult) Console.WriteLine (khách hàng. ToString()); } Tạo một danh sách khách hàng với dữ liệu mẫu danh sách riêng tĩnh CreateCustomerList() {/ / tương tự như trong ví dụ 13-1 Ví dụ 13-2. Một truy vấn LINQ đơn giản với lưu trữ kết quả (tiếp theo)Trong ví dụ này, bạn gọi ToList phương pháp của bộ sưu tập kết quả cache kết quả. Lưu ý rằng kêu gọi phương pháp này gây ra các truy vấn được đánh giá ngay lập tức. Nếu nguồn dữ liệu được thay đổi sau này, sự thay đổi sẽ không được phản ánh trong kết quả được lưu trữ. Bạn có thể nhìn thấy từ đầu ra rằng không có Donna Gates trong kết quả. Một điểm thú vị ở đây là ToList và ToArray phương pháp là không thực sự là phương pháp IEnumerable; nghĩa là, nếu bạn nhìn vào các tài liệu cho IEnumerable, bạn sẽ không thấy chúng trong danh sách các phương pháp. Họ có thực sự mở rộng phương pháp được cung cấp bởi LINQ. Chúng tôi sẽ xem xét phương pháp mở rộng chi tiết hơn sau này trong chương này. Nếu bạn đã quen thuộc với SQL, bạn sẽ thấy một sự tương đồng nổi bật giữa LINQ và SQL, ít trong cú pháp của họ. Số lẻ chỉ-một-out ở giai đoạn này là các tuyên bố chọn trong LINQ sẽ xuất hiện ở phần cuối của LINQ quer
đang được dịch, vui lòng đợi..
