Linq Order By не работает - PullRequest
7 голосов
/ 23 июня 2011

Запрос 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;
    }

Спасибо за ваш вклад!

Да, это метод WebGet для службы данных WCF.Я получаю ошибку 400, если не возвращаю тип IQueryable, поэтому я немного изменил ваше предложение.К сожалению, он все еще игнорирует любой заказ.

[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 ]

18 голосов
/ 23 июня 2011

Я заметил, что вы возвращаете IQueryable<T> - вызываете ли вы какие-либо методы LINQ для результата перед его перечислением?

Не все методы LINQ сохраняют порядок .Чаще всего, если вы позвоните Distinct() после , то заказ будет уничтожен.

1 голос
/ 28 июня 2011

Я нашел причину проблемы.

Я не установил столбец "полное имя" в качестве ключа объекта для объекта модели данных "vw_providercharge_providers". В качестве ключа сущности был задан только столбец идентификаторов. Я не понимал, что это было требованием, чтобы использовать его в порядке по пунктам.

Еще раз спасибо за ваш вклад.

1 голос
/ 25 июня 2011

Поскольку ваш метод помечен атрибутом WebGet, я предполагаю, что вы вызываете этот метод из конечной точки Web, поэтому вам может потребоваться свернуть коллекцию до ее отправки через Интернет.

Попытка:

[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.

С уважением,

...