PDA

View Full Version : سوال: مرتب کردن لیست iqeryable با نام فیلد به صورت String



IranVisual
دوشنبه 10 فروردین 1394, 13:27 عصر
سلام و خسته نباشید به همه
چند روز پیش یه متد واسه صفحه بندی GridView پیدا کردم ، تنها کمبودش اینه که برای مرتب سازی باید خودمون query بنویسیم .
چطور می تونم به جای query نوشتن مستقیم در برنامه از نام فیلد به صورت string برای مرتب سازی استفاده کنم .
مثلا به این صورت


entity.orderby("FieldName")


متد صفحه یندی




/// <summary>
/// صفحه بندی کوئری
/// </summary>
/// <param name="query">کوئری مورد نظر شما</param>
/// <param name="pageNum">شماره صفحه</param>
/// <param name="pageSize">سایز صفحه</param>
/// <param name="orderByProperty">ترتیب خواص</param>
/// <param name="isAscendingOrder">اگر برابر با <c>true</c> باشد صعودی است</param>
/// <param name="rowsCount">تعداد کل ردیف ها</param>
/// <returns></returns>
public static IQueryable<T> PagedResult<T>(IQueryable<T> query, int pageNum,
int pageSize, string orderByProperty,
bool isAscendingOrder, out int rowsCount)
{
// if (pageSize <= 0) pageSize = 20;

//مجموع ردیف‌های به دست آمده
rowsCount = query.Count();

// اگر شماره صفحه کوچکتر از 0 بود صفحه اول نشان داده شود
if (rowsCount <= pageSize || pageNum <= 0) pageNum = 1;

// محاسبه ردیف هایی که نسبت به سایز صفحه باید از آنها گذشت
int excludedRows = (pageNum - 1) * pageSize;

query = isAscendingOrder ? query.OrderBy(orderByProperty) : query.OrderByDescending(orderByProperty);

// ردشدن از ردیف‌های اضافی و دریافت ردیف‌های مورد نظر برای صفحه مربوطه
return query.Skip(excludedRows).Take(pageSize);
}



تشکر

hadi0x7c7
دوشنبه 10 فروردین 1394, 15:31 عصر
این طوری منظورتون هست؟
using (var db = new CmsContext()) {
return await db.Posts.
Include("Author").
Where(p => p.AuthorId == authorId).
OrderByDescending(post => post.Created).
ToArrayAsync();
}

در اینجا من بر اساس تاریخ ایجاد پست اونا رو مرتب کردم.

IranVisual
دوشنبه 10 فروردین 1394, 16:41 عصر
خیر ، یه نمونه پیدا کردم


public static class irGridExtensionMethods
{
public static IQueryable<T> Sort<T>(this IQueryable<T> query,
string sortField, bool isDescending)
{
if (isDescending)
return query.OrderByDescending(s => s.GetType()
.GetProperty(sortField));
else
return query.OrderBy(s => s.GetType()
.GetProperty(sortField));
}
}