2010-03-04 36 views
5

Làm cách nào để tôi thực hiện tìm kiếm LINQ bỏ qua các giá trị rỗng (hoặc nullables)?Tìm kiếm LINQ bỏ qua nulls

Tôi có một phương pháp

IEnumerable<X> Search(int? a, int? b, int? c) 

Và tôi muốn nó trở lại trận đấu trên bất kỳ ints? không phải là rỗng.

IE: nếu ac có giá trị 1 và 9 và b là null việc tìm kiếm nên render (khoảng) để

SELECT * 
FROM [TABLE] 
WHERE a = 1 
AND c = 9 

phương pháp thực sự của tôi sẽ có 5 + paramters, vì vậy kết hợp iterating là ra ngay.

Trả lời

5
IEnumerable<X> query = items; 
if (a.HasValue) { 
    query = query.Where(x => x.a == a.Value) 
} 
if (b.HasValue) { 
    query = query.Where(x => x.b == b.Value) 
} 
if (c.HasValue) { 
    query = query.Where(x => x.c == c.Value) 
} 
4
var result = from row in table 
where (!a.HasValue || row.a == a.Value) 
&& (!b.HasValue || row.b == b.Value) 
&& (!c.HasValue || row.c == c.Value) 
select row; 
+0

Bạn đã thử nghiệm này chưa? Tôi nhận được một 'InvalidOperationException' khi tôi cố gắng liệt kê kết quả. –

+0

Bạn có biết thêm chi tiết về lỗi này không? Thông báo lỗi là gì? –

+0

@David '{" Đối tượng khó đọc phải có giá trị. "}' –

Các vấn đề liên quan