अभिव्यक्ति पेड़ एक अच्छी सुविधा है, लेकिन इसके व्यावहारिक उपयोग क्या हैं? क्या उन्हें किसी प्रकार की कोड जनरेशन या मेटाप्रोग्रामिंग या कुछ ऐसे के लिए इस्तेमाल किया जा सकता है?अभिव्यक्ति पेड़ों का व्यावहारिक उपयोग
उत्तर
आप Google या फ़्लिकर या अमेज़ॅन, अपनी वेबसाइट या अन्य डेटा प्रदाता जैसी वेबसाइट के लिए अपना स्वयं का linq प्रदाता बनाने के लिए उनका उपयोग कर सकते हैं।
मार्क ग्रेवेल ने generic operators को लागू करने के लिए MiscUtil में उन्हें बहुत प्रभावशाली उपयोग किया है।
डर्न, मुझे इसे हराया ;- –
LINQ प्रदाताओं का कार्यान्वयन ज्यादातर अभिव्यक्ति वृक्षों को संसाधित करके किया जाता है। मैं भी उन्हें उपयोग कर रहा हूँ मेरे कोड से शाब्दिक तार को हटाने के लिए:
जॉन नोटों के रूप में, मैं उन्हें इस्तेमाल .NET 3.5 के साथ generic operators प्रदान करने के लिए। मैं गैर-डिफ़ॉल्ट कन्स्ट्रक्टरों तक तेज़ी से पहुंच प्रदान करने के लिए उन्हें (फिर से MiscUtil) का उपयोग भी करता हूं (आप Delegate.CreateDelegate
का उपयोग कन्स्ट्रक्टर के साथ नहीं कर सकते हैं, लेकिन Expression
ठीक काम करता है)।
मैन्युअल बनाया अभिव्यक्ति के पेड़ के अन्य उपयोग:
लेकिन वास्तव में, अभिव्यक्ति किसी भी गतिशील कोड लिखने का एक बहुत ही बहुमुखी तरीका है। Reflection.Emit
से बहुत आसान है, और मेरे पैसे के लिए, कोडडॉम से समझने में आसान है। और .NET 4.0 में, आपके पास even more options उपलब्ध है। मैं Expression
on my blog के माध्यम से कोड लिखने के मूलभूत सिद्धांतों को दिखाता हूं।
धन्यवाद। ब्लॉग नहीं दिखा रहा है !!! – pixparker
@ पिक्स्पाकर मैंने अभी इसका परीक्षण किया: ठीक काम कर रहे –
मैं गतिशील प्रश्न बनाने के लिए उनका उपयोग करता हूं, चाहे वह डेटा को सॉर्ट या फ़िल्टर करने के लिए हो। एक उदाहरण के रूप:
IQueryable<Data.Task> query = ctx.DataContext.Tasks;
if (criteria.ProjectId != Guid.Empty)
query = query.Where(row => row.ProjectId == criteria.ProjectId);
if (criteria.Status != TaskStatus.NotSet)
query = query.Where(row => row.Status == (int)criteria.Status);
if (criteria.DueDate.DateFrom != DateTime.MinValue)
query = query.Where(row => row.DueDate >= criteria.DueDate.DateFrom);
if (criteria.DueDate.DateTo != DateTime.MaxValue)
query = query.Where(row => row.DueDate <= criteria.DueDate.DateTo);
if (criteria.OpenDate.DateFrom != DateTime.MinValue)
query = query.Where(row => row.OpenDate >= criteria.OpenDate.DateFrom);
var data = query.Select(row => TaskInfo.FetchTaskInfo(row));
मूलतः Jomo Fisher द्वारा, Gustavo Guerra static string dictionary का एक संशोधित संस्करण प्रकाशित किया।
अभिव्यक्ति पेड़ के माध्यम से, एक गतिशील अभिव्यक्ति जो वास्तव में (पढ़ना: हास्यास्पद) शब्दकोश प्रदान करती है।
कार्यान्वयन एक गतिशील निर्णय पेड़ बनाता है जो इनपुट स्ट्रिंग की लंबाई के अनुसार कोरेंट मान का चयन करता है, फिर पहले अक्षर से, फिर दूसरा अक्षर और इसी तरह।
यह अंततः समकक्ष शब्दकोश की तुलना में बहुत तेज़ चलता है।
मैं अभिव्यक्ति पेड़ इस्तेमाल किया एक गणित अभिव्यक्ति मूल्यांकनकर्ता निर्माण करने के लिए: Building Expression Evaluator with Expression Trees in C#
मैं सिर्फ ExpressionTree
का उपयोग कर एक generic filter function
बनाया .. मैं तुम लोगों के साथ share
करना चाहते हैं ...
Start
var allFiltered= Filter(AllCustomer, "Name", "Moumit");
public static List<T> Filter<T>(this List<T> Filterable, string PropertyName, object ParameterValue)
{
ConstantExpression c = Expression.Constant(ParameterValue);
ParameterExpression p = Expression.Parameter(typeof(T), "xx");
MemberExpression m = Expression.PropertyOrField(p, PropertyName);
var Lambda = Expression.Lambda<Func<T, Boolean>>(Expression.Equal(c, m), new[] { p });
Func<T, Boolean> func = Lambda.Compile();
return Filterable.Where(func).ToList();
}
One More
string singlePropertyName=GetPropertyName((Property.Customer p) => p.Name);
public static string GetPropertyName<T, U>(Expression<Func<T, U>> expression)
{
MemberExpression body = expression.Body as MemberExpression;
// if expression is not a member expression
if (body == null)
{
UnaryExpression ubody = (UnaryExpression)expression.Body;
body = ubody.Operand as MemberExpression;
}
return string.Join(".", body.ToString().Split('.').Skip(1));
}
Make it more expandable
string multiCommaSeparatedPropertyNames=GetMultiplePropertyName<Property.Customer>(c => c.CustomerId, c => c.AuthorizationStatus)
public static string GetMultiplePropertyName<T>(params Expression<Func<T, object>>[] expressions)
{
string[] propertyNames = new string[expressions.Count()];
for (int i = 0; i < propertyNames.Length; i++)
{
propertyNames[i] = GetPropertyName(expressions[i]);
}
return propertyNames.Join();
}
....... मैं यह भी Reflection
उपयोग किया जा सकता पता है ... लेकिन यह एक जबरदस्त तेज़ है या मैंके बराबर कह सकता हूं पहले संकलन के बाद... पहला पहला पुनरावृत्ति केवल औसत 10 मिलीसेकंद धीमा है ... तो यह Expression Tree
जादू है। सरल और शानदार .... मुझे लगता है ... !!!!!!!!
अच्छा! उदाहरणों के लिए धन्यवाद। –
- 1. अभिव्यक्ति पेड़ों और एक प्रतिनिधि
- 2. गतिशील_कास्ट का व्यावहारिक उपयोग?
- 3. अभिव्यक्ति पेड़ों में सी # 4 "गतिशील"
- 4. .NET 3.5 अभिव्यक्ति पेड़ों में असाइनमेंट
- 5. `stackalloc` कीवर्ड का व्यावहारिक उपयोग
- 6. इंटरफ़ेस ईवेंट का व्यावहारिक उपयोग
- 7. गतिशील प्रश्नों और अभिव्यक्ति पेड़ों के लिए विधि का चयन करें का उपयोग करना
- 8. व्यावहारिक उपयोग
- 9. सिस्टम का व्यावहारिक उपयोग क्या है। लेनदेन?
- 10. पेड़ों का उपयोग करके सबसे लंबा आम सबस्ट्रिंग कैसे ढूंढें?
- 11. द्विआधारी खोज पेड़ों का उपयोग करने के ठोस उदाहरण?
- 12. पॉलिमॉर्फिज्म का व्यावहारिक उदाहरण
- 13. मेथडेंटल क्लास के व्यावहारिक उपयोग?
- 14. तीन आयामी matrices: व्यावहारिक उपयोग
- 15. Dispatcher.DisableProcessing के लिए व्यावहारिक उपयोग?
- 16. ईबीसी का उपयोग कर वास्तुकला का व्यावहारिक उदाहरण?
- 17. सी # अभिव्यक्ति पेड़ों में संकलक उत्पन्न कक्षाओं का विश्वसनीय रूप से पता लगाने
- 18. गतिशील विधि का व्यावहारिक उदाहरण?
- 19. व्यावहारिक विश्वसनीयता
- 20. सी # 4.0 में "गतिशील" चर का व्यावहारिक उपयोग क्या है?
- 21. एमवीसी का व्यावहारिक अनुप्रयोग || उपयोग करने के लिए, या एमवीसी
- 22. वायदा का व्यावहारिक उपयोग? हां, उन्हें कैसे मारना है?
- 23. LockSupport और AbstractQueuedSynchronizer का कोई व्यावहारिक उदाहरण उपयोग करते हैं?
- 24. कार्यात्मक भाषाओं में गुना/कम करने का व्यावहारिक उपयोग
- 25. पार्सर जनरेटर का उपयोग करना व्यावहारिक कब है?
- 26. मुलायम संदर्भों का उपयोग करने के "व्यावहारिक परिणाम" क्या हैं?
- 27. लाल-काले पेड़ों को जोड़ना
- 28. jQuery.map - फ़ंक्शन के लिए व्यावहारिक उपयोग?
- 29. ऑब्जेक्ट सीरियलाइजेशन व्यावहारिक उपयोग करता है?
- 30. बूस्ट :: एमपीएल के व्यावहारिक उपयोग के उदाहरण?
संभावित डुप्लिकेट [कुछ उदाहरण क्या हैं जिनमें अभिव्यक्ति पेड़ उपयोगी हैं?] (Http://stackoverflow.com/questions/27726/what-are-some-instances-in-which-expression-trees-are- उपयोगी) – nawfal