मुझे एक एक्सटेंशन विधि मिली है जो LINQ के लिए सॉर्टिंग और पेजिंग को संभालती है। हालांकि यह अच्छी तरह से काम करता है, मैं यह देखने की कोशिश कर रहा हूं कि कुछ अन्य तरीकों से मैं इसका उपयोग कर सकता हूं या नहीं।सॉर्टिंग और पेजिंग के लिए LINQ से SQL एक्सटेंशन विधि
public static IQueryable<T> Page<T, TResult>(
this IQueryable<T> obj,
int page,
int pageSize,
System.Linq.Expressions.Expression<Func<T, TResult>> keySelector,
bool asc,
out int rowsCount)
{
rowsCount = obj.Count();
int innerRows = (page - 1) * pageSize;
if (asc)
return obj.OrderBy(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
else
return obj.OrderByDescending(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
}
विधि एक अभिव्यक्ति है, जो बंद प्रकार आधारित है में लेता है:
वर्तमान में, extension method के लिए कोड इस प्रकार है।
मेरी डीलर वर्ग में, मैं एक विधि GetDealers है, जो अनिवार्य रूप से इस कॉल, अर्थात
db.User.Page(1, 2, p => p.User.UserProperty.Name, true, out rowCount)
हालांकि चीजों की प्रस्तुति की ओर से मैं नहीं जानता या जैसे के रूप में ऊपर अभिव्यक्ति का उपयोग कर सकते,
ListView1.DataSource = users.GetDealers("SortColumn", pageNo, pageSize, out rowCount, bool asc);
ListView1.DataBind();
एकमात्र तरीका है कि मेरे GetDealers विधि में स्विच स्टेटमेंट होना है जो अभिव्यक्ति में परिवर्तित हो जाएगा। क्या इसे बाईपास करने का कोई तरीका है, या यह विधि ठीक है?