Tôi vừa mới đọc một câu hỏi gần đây trên using conditionals in Linq và nó nhắc tôi về một vấn đề mà tôi không thể giải quyết được. Khi xây dựng LINQ to SQL truy vấn một cách lập trình làm thế nào điều này có thể được thực hiện khi số lượng các điều kiện không được biết đến cho đến khi thời gian chạy? Ví dụ trong đoạn mã bên dưới mệnh đề đầu tiên tạo ra một IQueryable, nếu được thực hiện, sẽ chọn tất cả các nhiệm vụ (gọi là các vấn đề) trong cơ sở dữ liệu, mệnh đề thứ 2 sẽ tinh chỉnh đó chỉ là các vấn đề được gán cho một bộ phận. đã được chọn trong một combobox (trong đó có nó được chọn mục ràng buộc với các thuộc tính departmentToShow).Sử dụng điều kiện trong LINQ Programatically
Làm cách nào tôi có thể thực hiện việc này bằng cách sử dụng bộ sưu tập selectedItems?
IQueryable<Issue> issuesQuery;
// Will select all tasks
issuesQuery = from i in db.Issues
orderby i.IssDueDate, i.IssUrgency
select i;
// Filters out all other Departments if one is selected
if (departmentToShow != "All")
{
issuesQuery = from i in issuesQuery
where i.IssDepartment == departmentToShow
select i;
}
Bằng cách này, mã trên được đơn giản hóa, trong mã thực tế có khoảng một chục mệnh đề tinh chỉnh truy vấn dựa trên cài đặt tìm kiếm và bộ lọc người dùng.
Thực tế một mục trong danh sách cần làm của tôi là kéo thứ tự rõ ràng ra và thêm vào giao diện để người dùng có một số điều khiển. –
Trong biểu thức Lambda ở trên làm thế nào mà sẽ làm việc với departmentToShow là một bộ sưu tập từ một combobox, tôi đã nghĩ rằng những gì bạn có là chính xác giống như truy vấn tôi có. Tôi phải thú nhận tôi là người mới bắt đầu và Lambdas là một trong những thứ có ý nghĩa hơn với tôi trong sách hơn là trong thực tế. –
@Mike B: Nó tương tự như những gì bạn có, nhưng rõ ràng là ít tiết và phiên bản gốc của bạn không đặt hàng trước bộ lọc thứ hai (bạn muốn nó xảy ra ở cuối). Nếu 'departmentToShow' là một bộ sưu tập thì bạn viết' departmentToShow.Contains (i.IssDepartment) 'thay vì' i.IssDepartment == departmentToShow'. – Aaronaught