您的位置:首页 > 产品设计 > UI/UE

error "Can only specify query options (orderby, where, take, skip) after last navigation" when fetching a List<string>

2014-08-29 14:59 2839 查看

Question

I use OData v3 and WCF in visual studio 2012.

I want to return List<string> using the following query, but got error "Can only specify query options (orderby, where, take, skip) after last navigation"

List<string> output = (from g in SFPServices.modelService.TGalleries

where g.IsEnabled

select g.Title).ToList();

After some research I was only able to get the query to execute without problem, below is where i am stuck:

List<string> output = new List<string>();

var temp = (from g in SFPServices.modelService.TGalleries

where g.IsEnabled

select new { g.Title });

Could someone please help populate the string list "output" with the query result? Or share a better way to generate the output?

thanks in advance

ANSWER:

output = temp.AsEnumerable().Select(t => t.Title).ToList();

That should do it. You can obviously write this in a single statement (no need for the temp variable). The trick is the AsEnumerable. The LINQ provider will try to translate everything before it (so your entire temp) into an OData query. But OData query only supports select if it's a subset of an entity, it can't change a query which returns an entity into a query which returns a string. But once you add the AsEnumerable, the query will execute there, and the rest (to the right) will be executed locally using LINQ to Objects which can handle any query just fine.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐