0

我有以下 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 文档说 select 确实有过载 http://msdn.microsoft.com/en-us/library/bb534869.aspx

可能是什么问题呢?

4

1 回答 1

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

于 2013-10-31T13:46:00.780 回答