1) स्थापित करें System.Linq.Dynamic
2) निम्नलिखित कोड
public static class OrderUtils
{
public static string ToStringForOrdering<T, TKey>(this Expression<Func<T, TKey>> expression, bool isDesc = false)
{
var str = expression.Body.ToString();
var param = expression.Parameters.First().Name;
str = str.Replace("Convert(", "(").Replace(param + ".", "");
return str + (isDesc ? " descending" : "");
}
}
3) लैम्ब्डा समारोह
public static class SortHelper
{
public static Expression<Func<UserApp, object>> UserApp(string orderProperty)
{
orderProperty = orderProperty?.ToLowerInvariant();
switch (orderProperty)
{
case "firstname":
return x => x.PersonalInfo.FirstName;
case "lastname":
return x => x.PersonalInfo.LastName;
case "fullname":
return x => x.PersonalInfo.FirstName + x.PersonalInfo.LastName;
case "email":
return x => x.Email;
}
}
}
4 के चयन के लिए अपने स्विच लिखें जोड़े) अपने सहायकों का प्रयोग करें
Dbset.OrderBy(SortHelper.UserApp("firstname").ToStringForOrdering())
5) आप pagging (PagedList)
public virtual IPagedList<T> GetPage<TOrder>(Page page, Expression<Func<T, bool>> where, Expression<Func<T, TOrder>> order, bool isDesc = false,
params Expression<Func<T, object>>[] includes)
{
var orderedQueryable = Dbset.OrderBy(order.ToStringForOrdering(isDesc));
var query = orderedQueryable.Where(where).GetPage(page);
query = AppendIncludes(query, includes);
var results = query.ToList();
var total = Dbset.Count(where);
return new StaticPagedList<T>(results, page.PageNumber, page.PageSize, total);
}
स्पष्टीकरण के साथ उपयोग कर सकते हैं
System.Linq.Dynamic हमें OrderBy विधि में स्ट्रिंग मान सेट करने के लिए अनुमति देता है। लेकिन इस विस्तार के अंदर स्ट्रिंग को लैम्ब्डा को पार्स किया जाएगा। तो मैंने सोचा कि यह काम करेगा अगर हम लैम्बडा को स्ट्रिंग करने और ऑर्डरबी विधि को देने के लिए पार्स करेंगे। और यह काम करता है!
स्रोत
2016-10-14 10:02:54
आप हो सकता है डायनामिक लिंक की तलाश में: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – BrokenGlass
@Nev_Rahd: सवाल को थोड़ा सा स्पष्ट करने का प्रयास किया। साथ ही, 'ऑर्डरबी' एक लिंक सुविधा है, और 'आईएनमेर्यूरेबल' पर है, न कि 'सूची' के लिए विशिष्ट सुविधा। संपादन को वापस रोल करने या इसे और बदलने के लिए स्वतंत्र महसूस करें :) –
संभावित डुप्लिकेट [डायनेमिक LINQ ऑर्डरबी पर IENumerable] (http: // stackoverflow।कॉम/प्रश्न/41244/गतिशील-linq-orderby-on-ienumerablet) –