我正在寫一個C#程序,我有以下方法。 我發現我在這種方法中多次編寫相同的代碼。我無法將代碼分解爲可重用的部分。有人可以看看它並建議嗎?如何重構此代碼以刪除重複的代碼
private static IOrderedQueryable<T> FormatQuery<T>(IQueryable<T> query, Expression property, ParameterExpression sortParam, SortFilter sortFilter, ref IOrderedQueryable<T> orderedQuery)
{
if (property.Type == typeof(int))
{
var sortExpr = Expression.Lambda<Func<T, int>>(property, new[] { sortParam });
orderedQuery = !sortFilter.IsDescending
? (orderedQuery == null ? query.OrderBy(sortExpr) : orderedQuery.ThenBy(sortExpr))
: (orderedQuery == null ? query.OrderByDescending(sortExpr) : orderedQuery.ThenByDescending(sortExpr));
}
else if (property.Type == typeof(bool))
{
var sortExpr = Expression.Lambda<Func<T, bool>>(property, new[] { sortParam });
orderedQuery = !sortFilter.IsDescending
? (orderedQuery == null ? query.OrderBy(sortExpr) : orderedQuery.ThenBy(sortExpr))
: (orderedQuery == null ? query.OrderByDescending(sortExpr) : orderedQuery.ThenByDescending(sortExpr));
}
else if (property.Type == typeof(DateTimeOffset?))
{
var sortExpr = Expression.Lambda<Func<T, DateTimeOffset>>(
Expression.Coalesce(property, Expression.Constant(DateTimeOffset.MaxValue)), new[] { sortParam });
orderedQuery = !sortFilter.IsDescending
? (orderedQuery == null ? query.OrderBy(sortExpr) : orderedQuery.ThenBy(sortExpr))
: (orderedQuery == null ? query.OrderByDescending(sortExpr) : orderedQuery.ThenByDescending(sortExpr));
}
else
{
var sortExpr = Expression.Lambda<Func<T, object>>(property, new[] { sortParam });
orderedQuery = !sortFilter.IsDescending
? (orderedQuery == null ? query.OrderBy(sortExpr) : orderedQuery.ThenBy(sortExpr))
: (orderedQuery == null ? query.OrderByDescending(sortExpr) : orderedQuery.ThenByDescending(sortExpr));
}
return orderedQuery;
}
在此先感謝。
謝謝。這在很大程度上簡化了我的代碼。非常感謝你。 – sahaneru