IEnumerable.Select的Int重载不起作用(用于行计数)

时间:2013-10-31 13:40:33

标签: c# linq

我有以下linq表达式:

    IQueryable posicion = 
       MonthlySales.Where(x => x.StoreCode == 7 && x.Year == 2013 && x.Month== 6)
                   .OrderBy (x=>x.AmountSold )
                   .Select ((f, index )=> new { f.AmountSold, f.ArticleCode, index} )
                   .Take(100);

在选择我包含的“索引”中,以便能够获得行号

我得到NotSupportedException:说我使用了与select运算符不兼容的重载。

MSDN文档说选择确实有一个过载 http://msdn.microsoft.com/en-us/library/bb534869.aspx

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

您需要针对提供程序执行查询才能使用该重载

   var posicion = 
   MonthlySales.Where(x => x.StoreCode == 7 && x.Year == 2013 && x.Month== 6)
               .OrderBy (x=>x.AmountSold )
               .Take(100);              
               .ToList()
               .Select ((f, index )=> new { f.AmountSold, f.ArticleCode, index} )

通过致电.ToList(),您正在针对提供商执行查询并将其转换为IEnumerable<T>。然后支持过载。另请注意,我已将调用移至.Take(100),以确保在构建列表之前执行限制返回金额。

您可以拨打.AsEnumerable()而不是.ToList(),主要是在调用.Select的重载之前执行查询