用户可以选择按价格或列出的日期排序。两者都可以按升序或降序排序。它们都可以使用或其中之一。
在这种情况下使用的最佳实用方法是什么?
我可以制作 1 个 linq 语句并替换单词"升序"/"降序"或通过修改字符串从语句中删除它们吗?(换句话说,像 SQL 一样构造 LINQ 语句?
您可以使用 SortOrder 枚举,而不是依赖字符串:
public MyCollection OrderedByPrice(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Ascending)
{
return new MyCollection(this.OrderBy(x => x.Price));
}
else
{
return new MyCollection(this.OrderByDescending(x => x.Price));
}
}
根据您的评论,如果您想同时订购,您可以使用 ThenBy
public MyCollection OrderedByPriceThenByDate(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Ascending)
{
return new MyCollection(this.OrderBy(x => x.Price)
.ThenBy(y => y.Date));
}
else
{
return new MyCollection(this.OrderByDescending(x => x.Price)
.ThenByDescending(y => y.Date));
}
}
你也可以构建一个表达式来做到这一点
public IEnumerable<T> ExecuteSort<T>(
IQueryable<T> src, Expression<Func<T,bool>> predicate, SortOrder sortOrder)
{
if (sortOrder == SortOrder.Ascending)
{
return src.OrderBy(predicate));
}
else
{
return src..OrderByDescending(predicate));
}
}
ExecuteSort(src, v => v.Price, ortOrder.Ascending);