我正在写一个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