Csharp/C#教程:为什么LINQ to SQL不支持查询运算符’ElementAt’?分享


为什么LINQ to SQL不支持查询运算符’ElementAt’?

在LINQ to SQL中,我得到exception“ 不支持查询运算符’ElementAt’。 ”当尝试在从LINQ to 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) 

现在我意识到要摆脱这个exception并使用ElementAt我可以在使用扩展方法之前调用’.ToList()’它会起作用。 这很好,但我仍然不喜欢这是一个运行时exception(看起来像LSP违规)的事实。

有没有理由不支持这些方法? 是不是因为它们无法轻易转换为SQL? 不支持哪些其他IQueryable / IEnumerable扩展方法,是否有某个列表?

避免运行时exception会很好。

从MSDN, 标准查询运算符转换(LINQ to SQL) – 本文包含尚未翻译的运算符的完整列表:

没有翻译的运营商

LINQ to SQL不会将以下方法转换。 最常见的原因是无序多集和序列之间的差异。

运营商

合理

ElementAt ,ElementAtOrDefault

SQL查询在多个集合上运行,而不是在可索引序列上运行。

这很奇怪,特别是因为支持Skip() 。 例如,你能做到:

 var obj = source.Skip(index).First(); 

上述就是C#学习教程:为什么LINQ to SQL不支持查询运算符’ElementAt’?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article Csharp/C#教程:为什么LINQ to SQL不支持查询运算符’ElementAt’?分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998165.html

(0)
上一篇 2021年12月26日 下午7:50
下一篇 2021年12月26日 下午7:50

精彩推荐