के आधार पर IEnumerable को फ़िल्टर करने के लिए कैसे करें मैं अब इकाई फ्रेमवर्क का उपयोग कर रहा हूं- लेकिन यह सभी ओआरएम और यहां तक कि IENumerable के बीच "साझा" की समस्या है।किसी इनपुट इनपुट पैरामीटर
मान लीजिए कि मैं MVC में एक विधि इस तरह दिखता है दो:
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(???).ToList();
return View(data);
}
मैं जैसे इनपुट पैरामीटर के आधार पर संदर्भ क्वेरी करना चाहते हैं:
var data = context.Foo.Where(x => x.Date == model.Date &&
x.Name == model.Name &&
x.ItemCode = model.ItemCode).ToList();
लेकिन यह उससे कहीं अधिक जटिल है, क्योंकि अगर उपरोक्त पैरामीटर में से एक (Date
\ Name
\ ItemCode
) शून्य है, तो मैं इसे क्वेरी के अंदर शामिल नहीं करना चाहता हूं।
मैं मुश्किल कोड यह कर सकते हैं इस के समान दिखाई देता है:
var query = context.Foo;
if (model.Date != null)
query =query.Where(x => x.Date == model.Date);
if (model.ItemCode != null)
query =query.Where(x => x.ItemCode == model.ItemCode);
...
इस से एक सरल तरीका होना चाहिए।
मुझे विधि विधि में उपयोग किए जाने के लिए Expression<T, bool>
प्रकार की अभिव्यक्ति उत्पन्न करने का एक तरीका चाहिए।
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(THE_EXPRESSION).ToList();
return View(data);
}
क्या अभिव्यक्ति बनाने का एक अंतर्निहित तरीका है? क्या नाजेट में कोई पैकेज है जो करता है?
अद्यतन: मॉडल इकाई में 30 से अधिक प्रॉपर्टीज़ हो सकती है; 30 बार लिखना जहां प्रत्येक क्वेरी के लिए गर्दन में दर्द हो सकता है:
.Where(model.Date != null, x => x.Date == model.Date)
.Where(model.Name != null, x => x.Name == model.Name)
.Where(model.ItemCode != null, x => x.ItemCode == model.ItemCode)
...
...
...
.ToList();
एक उदाहरण जो दिखाता है कि इस विधि का उपयोग कैसे किया जाता है, यह बहुत उपयोगी होगा। – devinbost