Linq ThenBy()投掷“;与的ThenBy()匹配的最佳重载方法具有一些无效参数“”;例外

本文关键字:ThenBy 具有一 无效 例外 方法 参数 与的 投掷 Linq 最佳 重载 | 更新日期: 2023-09-27 18:24:14

我有以下方法:

public List<LambdaExpression> defaultSortExpressions { get; set; }
private IQueryable<TEntity> orderEntries(IQueryable<TEntity> entries)
{
    var n = 0;
    foreach (var sortExpression in defaultSortExpressions)
    {
        if (n == 0)
        {
            entries = Queryable.OrderBy(entries, (dynamic)sortExpression);
        }
        else
        {
            entries = Queryable.ThenBy(entries, (dynamic)sortExpression);
        }
        n = n + 1;
    }
    return entries;
}

当执行TheyBy()行时,我得到以下异常:

"与"System.Linq.Queryable.ThenBy(System.Linq.IOrderedQueryable,System.Linq.Expressions.Expression>)"匹配的最佳重载方法包含一些无效参数"}
System.Exception{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

为什么不起作用?

Linq ThenBy()投掷“;与的ThenBy()匹配的最佳重载方法具有一些无效参数“”;例外

entries在编译时被强转换为IQueryable<TEntity>,而ThenBy需要IOrderedQueryable<TEntity>。在将entries传递到ThenBy()之前,可以尝试将其强制转换为IOrderedQueryable<TEntity>。或者,您可以在一个单独的变量中捕获对OrderBy的调用结果,该变量具有调用ThenBy的正确类型。

private IQueryable<TEntity> orderEntries(IQueryable<TEntity> entries)
{
    if(defaultSortExpressions.Count == 0)
        return entries;        
    IOrderedQueryable<TEntity> ordered = Queryable.OrderBy(entries, (dynamic) defaultSortExpressions[0]);
    
    foreach (var sortExpression in defaultSortExpressions.Skip(1))
    {
        ordered = Queryable.ThenBy(ordered, (dynamic)sortExpression);            
    }
    return ordered;
}
相关文章: