我有以下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
可能是什么问题?
答案 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
的重载之前执行查询