2010-03-13 19 views
21

Tôi đang cố gắng sử dụng LINQ để trả về một danh sách các tác vụ ở một trong ba trạng thái. Các trạng thái này là:C# - Báo cáo LINQ với mệnh đề OR

10 - Hoàn thành 11 - Incomplete 12 - Bỏ qua

Tình trạng có sẵn thông qua một tài sản gọi là "TaskStateID". Tôi có thể làm điều này trong LINQ chỉ với một tình trạng như ở đây:

var filteredTasks = from task in tasks 
        select task; 

// Do stuff with filtered tasks 

string selectedComboBoxValue = GetFilterComboBoxValue(); 
if (selected ComboBoxValue == 3) 
{ 
    filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10); // How do I use an 'OR' here to say p.TaskStateID == 10 OR p.TaskStateID == 11 OR p.TaskStateID == 12 
} 

Như đã trình bày trong các bình luận ở trên, làm thế nào để sử dụng một 'OR' trong một tuyên bố LINQ to nói p.TaskStateID == 10 OR p .TaskStateID == 11 HOẶC p.TaskStateID == 12?

Cảm ơn bạn

Trả lời

30

Sử dụng OR (||) điều hành:

filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 || 
             p.TaskStateID == 11 || 
             p.TaskStateID == 12); 
7

Sử dụng các nhà điều hành conditional OR:

filteredTasks = filteredTasks.Where(p => p.TaskStateID == 10 || 
             p.TaskStateID == 11 || 
             p.TaskStateID == 12); 
1

Rất đơn giản: bạn sử dụng ORS logic.

filteredTasks.Where(p => p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12) 

C# lambdas không sử dụng tập hợp con của ngôn ngữ C#: chúng sử dụng toàn bộ ngôn ngữ. Mọi thứ có thể trong C# đều có sẵn cho lambdas. Yêu cầu duy nhất là biểu thức phải trả về đúng loại; và thậm chí sau đó bạn có thể sử dụng dấu ngoặc nhọn để bao gồm mã phức tạp hơn:

p => { /* code block that has a return statement here */ } 
1
filteredTasks.Where(p => (p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12)) 
15
var taskIds = new[]{10, 11, 12} 

var selectedTasks = filteredTasks.Where(p => taskIds.Contains(p.TaskStateID)) 
+0

+1 để bảo trì! –

+0

Miễn là bạn đặt toán tử lambda vào đúng vị trí ... oh, và hãy nhớ rằng điều này sẽ tạo ra một đóng cửa. –

+0

Bạn cũng chỉ có thể sử dụng Chứa các chuỗi. – Hemslingo

2

Cách đơn giản nhất:

.Where(p => p.TaskStateID == 10 || p.TaskStateID == 11 || p.TaskStateID == 12) 

Hoặc bạn cũng có thể làm một cái gì đó như thế này:

var states = new int[] {10,11,12}; 
filteredTasks = filteredTasks.Join(states, p => p.state, s => s, (p, s) => p); 
Các vấn đề liên quan