आसान तरीका
बस
if (comparison == ComparisonType.StartsWith)
query = query.Where(e => e.StringProperty.StartsWith("SearchString"));
else if ...
मुश्किल तरीके से
का उपयोग आप इस तरह कुछ करने के लिए चाहते हैं, या तो सुनिश्चित करें कि आपके LINQ प्रदाता के बारे में बताया जा सकता है इस नई विधि को किसी भी तरह, और यह एसक्यूएल (असंभव) में कैसे अनुवाद करता है, या आपकी विधि को LINQ प्रदाता तक पहुंचने से रोकता है, और प्रदाता को कुछ समझता है (हे आरडी)। उदाहरण के लिए,
query.Where(e => CompMethod(e.StringProperty, "SearchString", comparsionType))
के बजाय के लिए आप इस तरह से
var query = from e in source.WhereLike(
e => e.StringProperty, "SearchString", comparsionType)
where e.OtherProperty == 123
orderby e.StringProperty
select e;
public enum ComparisonType { StartsWith, EndsWith, Contains }
public static class QueryableExtensions
{
public static IQueryable<T> WhereLike<T>(
this IQueryable<T> source,
Expression<Func<T, string>> field,
string value,
SelectedComparisonType comparisonType)
{
ParameterExpression p = field.Parameters[0];
return source.Where(
Expression.Lambda<Func<T, bool>>(
Expression.Call(
field.Body,
comparisonType.ToString(),
null,
Expression.Constant(value)),
p));
}
}
तुम भी अतिरिक्त मापदंड जोड़ सकते हैं निम्न कोड के साथ की तरह
var query = source.WhereLike(e => e.StringProperty, "SearchString", comparsionType)
कुछ बना सकते हैं बहुत, बहुत मुश्किल तरीके से
यह (तकनीकी) अभिव्यक्ति पेड़ के पुनर्लेखन के लिए पहले प्रदाता इसे देखता है, तो आप क्वेरी आप पहली जगह में मन में था का उपयोग कर सकते संभव होगा, लेकिन आप ' d एक Where(this IQueryable<EntityType> source, Expression<Func<EntityType, bool>> predicate)
- करने के लिए है बनाने के बीच में रोकने का
Queryable.Where
,
- अभिव्यक्ति पेड़ को फिर से लिखने,
String
तरीकों में से एक के साथ अपने CompMethod
की जगह, जहाँ भी यह है,
- रीयल लिखित अभिव्यक्ति के साथ मूल
Queryable.Where
पर कॉल करें,
- और सबसे पहले, ऊपर दी गई एक्सटेंशन विधि का पालन करने में सक्षम हो जाएं!
लेकिन संभवतः यह आपके मन में जो कुछ भी था उसके लिए बहुत जटिल है।
रुबेन: घटनात्मक, यह एक स्पष्टीकरण का एक नरक है - पूर्ण, समझने योग्य, पूरी तरह से और बिल्कुल जो मैं ढूंढ रहा था, धन्यवाद। मैं उनकी सहायता के लिए दूसरों को भी धन्यवाद देना चाहूंगा। –