var sortQ = filterQ; // <--- update
if (iSortingCols > 0)
{
sortQ = (sortDirs[0] == "asc") ?
sortQ.OrderBy((d) => d.GetColumnData()[sortCols[0]]) :
sortQ.OrderByDescending((d) => d.GetColumnData()[sortCols[0]]);
if (iSortingCols > 1)
{
for (int i = 1; i < iSortingCols; i++)
{
sortQ = (sortDirs[i] == "asc") ?
sortQ.ThenBy(d => d.GetColumnData()[sortCols[i]]) :
sortQ.ThenByDescending(d => d.GetColumnData()[sortCols[i]]);
}
}
}
编译器在for循环中强调了三元运算符的两个结果,称IEnumerable&lt; ...&gt;没有名为ThenBy的方法重载(类似于ThenByDescending),但sortQ将是IOrderedEnumerable&lt; ...&gt;在那个街区。为什么C#类型的推断没有捡到它?
更新:对于那些之前可能感到困惑的人,我从原始代码段中遗漏的是我将sortQ分配给另一个查询的结果,该查询强制类型推理引擎输入sortQ作为一个IEnumerable&lt; ..&gt;,这当然是搞砸了我的例子。下面的答案是解决这个问题的方法。感谢@Marc在各行之间进行阅读。
答案 0 :(得分:2)
我猜sortQ
是IEnumerable<T>
;您需要IOrderedEnumerable<T>
才能使用ThenBy
;幸运的是,你的第一个OrderBy
会返回此信息,所以请抓住它:
var result = (sortDirs[0] == "asc") ?
sortQ.OrderBy((d) => d.GetColumnData()[sortCols[0]]) :
sortQ.OrderByDescending((d) => d.GetColumnData()[sortCols[0]]);
if (iSortingCols > 1)
{
for (int i = 1; i < iSortingCols; i++)
{
result = (sortDirs[i] == "asc") ?
result.ThenBy(d => d.GetColumnData()[sortCols[i]]) :
result.ThenByDescending(d => d.GetColumnData()[sortCols[i]]);
}
}