问题描述
|
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;
}
解决方法
我注意到您返回了
IQueryable<T>
-在枚举结果之前您是否对结果调用任何LINQ方法?
并非所有LINQ方法都保留顺序。最常见的是,在您下订单后呼叫Distinct()
将破坏订单。
, 由于您的方法标记有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方法返回的是array而不是linq表达式。
问候,
, 我找到了问题的原因。
我没有将\“ fullname \”列设置为\“ vw_providercharge_providers \”数据模型实体的实体键。仅将标识列设置为实体密钥。我没有意识到这是在order by子句中使用它的要求。
再次感谢您的输入。