जैसे: एक्स => x.Name = "जी"Expression.Like
मैं आकर्षण की तरह इस
public Expression<Func<TEntity, bool>> SearchExpression()
{
var c = new ConstantExpression[_paramList.Count];
var b = new BinaryExpression[_paramList.Count];
BinaryExpression comparisonExpression = null;
var entity = Expression.Parameter(typeof(TEntity));
for (int i = 0; i < _paramList.Count; i++)
{
var value = Convert.ChangeType(_paramList[i].Item2 /*"g"*/, _paramList[i].Item3 /*System.String*/);
c[i] = Expression.Constant(value); //"g"
// PROBLEM IS HERE
b[i] = Expression.Equal(Expression.Property(entity, _paramList[i].Item1 /*Name*/, c[i]);
// PROBLEM IS HERE
}
_paramList.Clear();
comparisonExpression = b.Aggregate(Expression.And);
return Expression.Lambda<Func<TEntity, bool>>(comparisonExpression, entity);
}
काम करता है की तरह कोड ब्लॉक है, लेकिन मैं जरूरत Expression.Like(जैसा "जी" बराबर नहीं "जी")
Expression.Like(Expression.Property(entity, _paramList[i].Item1), c[i])
लेकिन सी # अभिव्यक्ति पेड़ मीटर की तरह का समर्थन नहीं करता ethod
अद्यतन:
मैं कुछ इस तरह लिखा है:
Expression.Call(Expression.Property(entity, _paramList[i].Item1),
typeof(String).GetMethod("Contains"), new Expression[] { c[i] });
लेकिन मैं BinaryExpression नहीं MethodCallExpression
मैं तुम्हें string.Contains के लिए एक विधि मंगलाचरण इंजेक्षन करने की जरूरत है लगता है। अभिव्यक्ति के रूप में उपलब्ध बॉक्स से बाहर 'अभिव्यक्ति। जैसा' नहीं है। – Maarten
@ एड्रियन रैग, अभिव्यक्ति में ट्री स्ट्रिंग नहीं है !!!!!!!!!!!! –
@ user3432343 * संभव *। यदि आप कह रहे हैं कि यह नहीं है, तो मैं करीबी वोट वापस ले जाऊंगा। –