एक समाधान हो सकता है आप Dynamic Linq Library उपयोग करने के लिए, इस लाइब्रेरी का उपयोग कर रहा है:
filterTable = //some code to retrive it
var whereClause = string.Join(" AND ", filterTable.Select(x=> x.Left + x.Right));
var result = context.People.Where(whereClause).ToList();
यह मानते हुए कि फिल्टर तालिका स्तंभ Left
और Right
है और आप AND
द्वारा फिल्टर शामिल करना चाहते हैं।
मेरे सुझाव, फिल्टर तालिका में अधिक विवरण शामिल करने के लिए है, उदाहरण के लिए ऑपरेंड से ऑपरेटरों को अलग करने और एक स्तंभ में शामिल होने के निर्धारित करता है जोड़ने है And
या OR
और एक स्तंभ है कि अन्य पंक्ति जो इस एक मिलती है निर्धारित करता है। यदि आप (A and B)Or(C and D)
जैसे अधिक जटिल प्रश्नों को संभालना चाहते हैं तो आपको पेड़ की संरचना की आवश्यकता है।
फ़िल्टर समाधान से अभिव्यक्ति वृक्ष बनाने का एक और समाधान है।
var arg = Expression.Parameter(typeof(People));
Expression whereClause;
for(var row in filterTable)
{
Expression rowClause;
var left = Expression.PropertyOrField(arg, row.PropertyName);
//here a type cast is needed for example
//var right = Expression.Constant(int.Parse(row.Right));
var right = Expression.Constant(row.Right, left.Member.MemberType);
switch(row.Operator)
{
case "=":
rowClause = Expression.Equal(left, right);
break;
case ">":
rowClause = Expression.GreaterThan(left, right);
break;
case ">=":
rowClause = Expression.GreaterThanOrEqual(left, right);
break;
}
if(whereClause == null)
{
whereClause = rowClause;
}
else
{
whereClause = Expression.AndAlso(whereClause, rowClause);
}
}
var lambda = Expression.Lambda<Func<People, bool>>(whereClause, arg);
context.People.Where(lambda);
यह बहुत ही सरल उदाहरण आदेश में इस प्रश्नों के सभी प्रकार के लिए काम करता है बनाने के लिए कई सत्यापन प्रकार कास्टिंग और ..., आपको क्या करना चाहिए है: यहाँ एक सरल उदाहरण है।
स्रोत
2015-08-21 08:27:13
इकाई ढांचे के साथ आप इसका उपयोग कहां कर सकते हैं: ob.Where (p => p.age> 70 && लिंग == "पुरुष")। – MaticDiba
आयु और 70 स्ट्रिंग फ़िल्टर हैं जिन्हें डीबी से पुनर्प्राप्त किया जाता है। तो मैं कोड की इस पंक्ति को कैसे लिख सकता हूं?कृपया प्रश्न फिर से पढ़ें। धन्यवाद। – ConductedClever
आप इस [अभिव्यक्ति निर्माता] का उपयोग कर सकते हैं (http://www.codeproject.com/Tips/582450/Build-Where-Clause- गतिशील-in-Linq) –