मेरे पास स्ट्रिंग मानों का उपयोग करके लिंक क्वेरी को गतिशील रूप से फ़िल्टर करने के लिए एक लिंक एक्सटेंशन विधि है। उदाहरण के लिए: query.WhereHelper("columName", ">", 1)
। मैं ग्रेटरथान या नोटएक्वल इत्यादि जैसे कई अलग-अलग फ़िल्टर ऑपरेटर का उपयोग कर सकता हूं लेकिन "पसंद नहीं"। कोई अभिव्यक्ति नहीं है। पसंद या अभिव्यक्ति। स्टार्ट्स इत्यादि। मैं अपने अभिव्यक्ति पेड़ में ऑपरेटर की तरह कैसे कार्यान्वित कर सकता हूं? यहाँ मेरी कोड है:अभिव्यक्ति वृक्ष में ऑपरेटर की तरह
public static IQueryable<T> WhereHelper<T>(this IQueryable<T> source, string columnName, object value, string filterType)
{
ParameterExpression table = Expression.Parameter(typeof(T), "");
Expression column = Expression.PropertyOrField(table, columnName);
Expression valueExpression = Expression.Convert(Expression.Constant(value), column.Type);
Expression where = null;
switch (filterType)
{
case "<":
where = Expression.LessThan(column, valueExpression);
break;
case "<=":
where = Expression.LessThanOrEqual(column, valueExpression);
break;
case "=":
where = Expression.Equal(column, valueExpression);
break;
case ">":
where = Expression.GreaterThan(column, valueExpression;
break;
case ">=":
where = Expression.GreaterThanOrEqual(column, valueExpression);
break;
case "<>":
where = Expression.NotEqual(column, valueExpression);
break;
}
Expression lambda = Expression.Lambda(where, new ParameterExpression[] { table });
Type[] exprArgTypes = { source.ElementType };
MethodCallExpression methodCall = Expression.Call(typeof(Queryable),
"Where",
exprArgTypes,
source.Expression,
lambda);
return (IQueryable<T>)source.Provider.CreateQuery<T>(methodCall);
"सहायक कार्यों" मेरा मतलब है कर रहे हैं [ 'SqlMethods'] (http://msdn.microsoft.com/en-us/library/system। data.linq.sqlclient.sqlmethods.aspx) - विशेष रूप से 'पसंद() ' –
ईएफ के बारे में टिप्पणी गलत है। नहीं है [EntityFunctions] (http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.aspx) जो 'L2S के लिए SqlMethods' को analagous है। हालांकि, 'एंड्सविथ' और 'कंटेनस' जैसे कार्यों को ईएफ में मूल रूप से समर्थित किया गया है और ऐसे सहायकों की आवश्यकता नहीं है। –
@ क्रिएग धन्यवाद; मैं उस बारे में नहीं जानता था। –