Linq订单不工作

时间:2011-06-23 19:14:14

标签: linq sql-order-by

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;
}

3 个答案:

答案 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子句中使用它的要求。

再次感谢您的意见。