2012-09-17 27 views
7

Biểu thức Lambda cho nhà điều hành Contains Tôi có thể tạo bằng mã này.Biểu thức Lambda NotContains operator Exists?

Biểu

Company => Company.Name.Contains("test1") 

Source code

var method = typeof(string).GetMethod("Contains", new[] { typeof(string) }); 
var startsWithDishExpr = Expression.Call(argLeft, method, argRight); 

của nó làm việc tốt cho Contains điều hành. Cách sửa đổi mã để làm việc cho nhà điều hành NotContains.

Source code

var method = typeof(string).GetMethod("NotContains", new[] { typeof(string) }); 
var startsWithDishExpr = Expression.Call(argLeft, method, argRight); 

NotContains điều hành không làm việc. Ai có đề nghị?

+6

Điều gì về việc kết hợp toán tử 'không' đơn giản với lệnh gọi' Contains'? tức là 'Expression.Not (Expression.Call (containsMethod, ...))' – CodesInChaos

+6

Mẫu đầu tiên của bạn đang tạo một cuộc gọi đến phương thức 'string.Contains'. Không có phương thức nào như 'string.NotContains'. –

+0

@CodesInChaos Rất tiếc, tôi không thấy nhận xét của bạn ngay lập tức. Đăng nó như là một câu trả lời, tôi sẽ upvote nó :) – dasblinkenlight

Trả lời

16

Không có phương thức string.NotContains, do đó việc tạo cuộc gọi đến phương thức có tên NotContains không hoạt động.

Một giải pháp đơn giản là kết hợp toán tử not với phương thức Contains. Cũng giống như bình thường bạn sẽ viết !x.Contains(y) và không phải x.NotContains(y).

Để tạo biểu thức như vậy, bạn có thể sử dụng Expression.Not(callExpression).

+0

CodesInChaos, Expression.Not (callExpression), tuyệt vời nó làm việc cho NotContains. Cảm ơn – sivaL