c# - Why is the query operator 'ElementAt' is not supported in LINQ to SQL? -
in linq sql, exception "the query operator 'elementat' not supported." when trying use elementat extension method on iqueryable returned linq sql query.
here stack trace:
at system.data.linq.sqlclient.queryconverter.visitsequenceoperatorcall(methodcallexpression mc) @ system.data.linq.sqlclient.queryconverter.visitmethodcall(methodcallexpression mc) @ system.data.linq.sqlclient.queryconverter.visitinner(expression node) @ system.data.linq.sqlclient.queryconverter.convertouter(expression node) @ system.data.linq.sqlclient.sqlprovider.buildquery(expression query, sqlnodeannotations annotations) @ system.data.linq.sqlclient.sqlprovider.system.data.linq.provider.iprovider.execute(expression query) @ system.data.linq.table`1.system.linq.iqueryprovider.execute[tresult](expression expression) @ system.linq.queryable.elementat[tsource](iqueryable`1 source, int32 index)
now realize rid of exception , use elementat call '.tolist()' before using extension method , work. fine, still don't fact runtime exception (and seems lsp violation).
is there reason why these methods cannot supported? because cannot translated sql? other iqueryable/ienumerable extension methods not supported, there list somewhere?
it nice avoid runtime exceptions.
from msdn, standard query operator translation (linq sql) - article contains full list of operators haven't been translated:
- takewhile , skipwhile
- reverse
- last , lastordefault
- elementat , elementatordefault
- defaultifempty
operators no translation
the following methods not translated linq sql. common reason difference between unordered multisets , sequences.
operators
rationale
...
elementat , elementatordefault
sql queries operate on multisets, not on indexable sequences.
Comments
Post a Comment