[c#] جملة WHERE الديناميكية في LINQ


Answers

يمكنك أيضًا استخدام PredicateBuilder من LinqKit إلى سلسلة تعبيرات lambda متعددة الأنماط باستخدام Or أو And.

http://www.albahari.com/nutshell/predicatebuilder.aspx

Question

ما هي أفضل طريقة لتجميع جملة WHERE ديناميكية إلى عبارة LINQ؟

لدي عدة عشرات مربعات الاختيار في نموذج ثم تمريرها مرة أخرى كـ: القاموس <string، List <string >> (Dictionary <fieldName، List <values ​​>>) إلى استعلام LINQ الخاص بي.

public IOrderedQueryable<ProductDetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string,List<string>> filterDictionary)
{
    var q = from c in db.ProductDetail
            where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName
            // insert dynamic filter here
            orderby c.ProductTypeName
            select c;
    return q;
}






لدي سيناريو مشابه حيث أحتاج إلى إضافة فلاتر استنادًا إلى إدخال المستخدم وأقوم بتسلسل العبارة في المكان.

هنا هو نموذج التعليمات البرمجية.

var votes = db.Votes.Where(r => r.SurveyID == surveyId);
if (fromDate != null)
{
    votes = votes.Where(r => r.VoteDate.Value >= fromDate);
}
if (toDate != null)
{
    votes = votes.Where(r => r.VoteDate.Value <= toDate);
}
votes = votes.Take(LimitRows).OrderByDescending(r => r.VoteDate);



هذا المشروع على CodePlex لديك ما تريد.

System.Linq.Dynamic - http://dynamiclinq.codeplex.com/

وصف المشروع

يوسع System.Linq.Dynamic لدعم تنفيذ تعبيرات Lambda المحددة في سلسلة ضد Entity Framework أو أي مزود يدعم IQueryable.

بما أنه امتداد لرمز المصدر الذي يمكنك العثور عليه في مدونة Scott Guthrie ، فإنه سيسمح لك بتنفيذ أشياء مثل هذه:

وأشياء من هذا القبيل:




Related