在LINQ to SQL中,出现异常“不支持查询运算符'ElementAt'”。尝试在从LINQ返回SQL查询的IQueryable上使用ElementAt扩展方法时。

这是堆栈跟踪:

at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
   at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
   at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
   at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.ElementAt[TSource](IQueryable`1 source, Int32 index)

现在,我意识到摆脱此异常并使用ElementAt可以在使用扩展方法之前调用'.ToList()',它将起作用。很好,但是我仍然不喜欢这是一个运行时异常(以及类似LSP违规)的事实。

为什么不能支持这些方法?仅仅是因为它们不能轻松地转换成SQL吗?不支持其他哪些IQueryable/IEnumerable扩展方法,某处是否有列表?

最好避免运行时异常。

最佳答案

在MSDN中,Standard Query Operator Translation (LINQ to SQL)-本文包含尚未翻译的运算符的完整列表:

  • TakeWhile,跳过
  • 反向
  • Last,LastOrDefault
  • ElementAt,ElementAtOrDefault
  • DefaultIfEmpty

  • 关于c# - 为什么LINQ to SQL不支持查询运算符 'ElementAt'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5147767/

    10-11 21:41