C# 通过将Linq语句构造为字符串在Linq中排序?

C# 通过将Linq语句构造为字符串在Linq中排序?,c#,asp.net,sql,linq,sorting,C#,Asp.net,Sql,Linq,Sorting,用户可以选择按价格或按列出的日期排序。两者都可以按升序或降序排序。它们都可以使用,也可以使用其中一个 在这种情况下,最好的实用方法是什么 我可以创建一条linq语句并替换单词“升序”/“降序”,或者通过修改字符串将它们从语句中删除吗?(换句话说,像sql一样构造linq语句?而不是依赖字符串,您可以使用枚举: 根据您的意见,如果您想同时订购,您可以使用 您还可以构建一个表达式来执行此操作 public IEnumerable<T> ExecuteSort<T>( I

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

在这种情况下,最好的实用方法是什么


我可以创建一条linq语句并替换单词“升序”/“降序”,或者通过修改字符串将它们从语句中删除吗?(换句话说,像sql一样构造linq语句?

而不是依赖字符串,您可以使用枚举:

根据您的意见,如果您想同时订购,您可以使用


您还可以构建一个表达式来执行此操作

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); 
public IEnumerable ExecuteSort(
IQueryable src,表达式谓词,排序器(SortOrder)
{
if(sortOrder==sortOrder.升序)
{
返回src.OrderBy(谓词));
}
其他的
{
返回src..OrderByDescending(谓词));
}
}
ExecuteSort(src,v=>v.Price,或Order.升序);

因此,如果我想按两者排序,我需要调用OrderedByPrice并按日期将其结果发送给Order?
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);