Linq查询“order by”无效,我已按照您网站和其他网站上的所有建议进行操作。任何帮助将不胜感激。
[WebGet]
public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted)
{
var results = (from p in this.CurrentDataSource.vw_providercharge_providers
where p.submitted == submitted
orderby p.fullname
select p);
return results;
}
感谢您的投入!
是的,这是WCF数据服务的WebGet方法。如果我没有返回IQueryable类型,我会收到400错误,所以我稍微修改了你的建议。不幸的是,它似乎仍然无视任何订单。
[WebGet]
public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted)
{
var results = (from p in this.CurrentDataSource.vw_providercharge_providers
where p.submitted == submitted
orderby p.fullname
select p).ToArray();
results.OrderBy(p => p.patientname);
return results;
}
答案 0 :(得分:18)
我注意到你返回IQueryable<T>
- 你在枚举之前是否在结果上调用了任何LINQ方法?
Not all LINQ methods preserve order。最常见的是,在之后调用Distinct()
进行排序会破坏订单。
答案 1 :(得分:1)
由于您的方法标有WebGet属性,我假设您从Web端点调用此方法,因此您可能需要在通过Internet发送之前折叠该集合。
尝试:
[WebGet]
public vw_providercharge_providers[] GetChargeProviders(int submitted)
{
var results = (from p in this.CurrentDataSource.vw_providercharge_providers
where p.submitted == submitted
orderby p.fullname
select p).ToArray();
return results;
}
通过这种方式,您可以保证GetChargeProviders方法返回而不是linq表达式。
此致
答案 2 :(得分:1)
我找到了问题的原因。
我没有将“fullname”列设置为“vw_providercharge_providers”数据模型实体的实体密钥。仅将标识列设置为实体密钥。我没有意识到这是在order by子句中使用它的要求。
再次感谢您的意见。