通过将 linq 语句构造为字符串在 Linq 中进行排序

本文关键字:Linq 排序 字符串 linq 语句 | 更新日期: 2023-09-27 17:56:22

用户可以选择按价格或列出的日期排序。两者都可以按升序或降序排序。它们都可以使用或其中之一。

在这种情况下使用的最佳实用方法是什么?

我可以制作 1 个 linq 语句并替换单词"升序"/"降序"或通过修改字符串从语句中删除它们吗?(换句话说,像 SQL 一样构造 LINQ 语句?

通过将 linq 语句构造为字符串在 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);