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
为什么不起作用?
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;
}