Заказ по убыванию в зависимости от условия - PullRequest
4 голосов
/ 15 апреля 2010

Я хочу написать запрос LINQ to Entity, который выполняет упорядочение по возрастанию или убыванию на основе входного параметра. Есть ли способ для этого. Ниже приведен мой код. Пожалуйста, предложите.

    public List<Hosters_HostingProviderDetail> GetPendingApproval(SortOrder sortOrder)
    {
        List<Hosters_HostingProviderDetail> returnList = new List<Hosters_HostingProviderDetail>();
        int pendingStateId = Convert.ToInt32(State.Pending);
        //If the sort order is ascending
        if (sortOrder == SortOrder.ASC)
        {
            var hosters = from e in context.Hosters_HostingProviderDetail
                          where e.ActiveStatusID == pendingStateId
                          orderby e.HostingProviderName ascending
                          select e;
            returnList = hosters.ToList<Hosters_HostingProviderDetail>();
            return returnList;
        }
        else
        {
            var hosters = from e in context.Hosters_HostingProviderDetail
                          where e.StateID == pendingStateId
                          orderby e.HostingProviderName descending
                          select e;
            returnList = hosters.ToList<Hosters_HostingProviderDetail>();
            return returnList;
        }
    }

Ответы [ 2 ]

7 голосов
/ 15 апреля 2010

Я не думаю, что вы можете поместить условие в больший запрос, но вы можете разделить его на другой оператор C #, например:

// Common code:
var hosters = from e in context.Hosters_HostingProviderDetail
              where e.ActiveStatusID == pendingStateId;

// The difference between ASC and DESC:
hosters = (sortOrder == SortOrder.ASC ? hosters.OrderBy(e => e.HostingProviderName) : hosters.OrderByDescending(e => e.HostingProviderName));

// More common code:
returnList = hosters.ToList<Hosters_HostingProviderDetail>();
3 голосов
/ 15 апреля 2010

Вы можете уменьшить его еще на шаг с помощью

var hosters = from e in context.Hosters_HostingProviderDetail
              where e.ActiveStatusID == pendingStateId
              select e;

if (sortOrder == SortOrder.ASC)
   hosters = hosters.OrderBy(e => e.HostingProviderName);
else
    hosters = hosters.OrderByDescending(e => e.HostingProviderName);

return hosters.ToList<Hosters_HostingProviderDetail>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...