2012-09-17 30 views
7

Contains ऑपरेटर के लिए लैम्ब्डा अभिव्यक्ति मैं इस कोड का उपयोग कर उत्पन्न करने में सक्षम हूं।लैम्ब्डा अभिव्यक्ति नहीं है ऑपरेटर मौजूद है?

अभिव्यक्ति

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

स्रोत कोड

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

इसके Contains ऑपरेटर के लिए ठीक काम कर रहा। NotContains ऑपरेटर के लिए काम करने के लिए कोड में कैसे संशोधित करें।

स्रोत कोड

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

NotContains ऑपरेटर काम नहीं कर रहा। किसी के पास सुझाव है?

+6

'युक्त' कॉल के साथ एक सरल 'नहीं' ऑपरेटर को संयोजित करने के बारे में क्या? यानी 'Expression.Not (Expression.Call (includeMethod, ...)) ' – CodesInChaos

+6

आपका पहला नमूना' string.Contains' विधि पर कॉल बना रहा है। 'String.NotContains' जैसी कोई विधि नहीं है। –

+0

@CodesInChaos ओह, मैंने तुरंत आपकी टिप्पणी नहीं देखी। इसे एक उत्तर के रूप में पोस्ट करें, मैं इसे ऊपर उठाऊंगा :) – dasblinkenlight

उत्तर

16

कोई string.NotContains विधि नहीं है, इसलिए NotContains नामक विधि को कॉल करना काम नहीं करता है।

विधि के साथ not ऑपरेटर को गठबंधन करना एक आसान समाधान है। सामान्य रूप से आप !x.Contains(y) लिखेंगे और x.NotContains(y) नहीं लिखेंगे।

ऐसी अभिव्यक्ति बनाने के लिए आप Expression.Not(callExpression) का उपयोग कर सकते हैं।

+0

CodeInChaos, Expression.Not (callExpression), महान यह NotContains के लिए काम किया। धन्यवाद – sivaL

संबंधित मुद्दे