Список страниц Nerd Dinner - как динамически добавить предложение linq orderby? КТО-НИБУДЬ? - PullRequest
0 голосов
/ 23 июля 2010

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

Как бы мне это реализовать?Вот мой код?

Контроллер:

 PaginatedList<Classifieds_Ads> pageOfClassifieds = new PaginatedList<Classifieds_Ads>(classifiedsRepositry.GetClassifiedsInCategory(category), paging, 20);

Репозиторий:

    return from classifieds in context.Classifieds_Ads.Include("User")
           where (from catergory in context.Classifieds_Categories
                  where catergory.MVC_URL == MVC_Cat 
                  select catergory).Contains(classifieds.Classifieds_Categories)
            orderby classifieds.DatePosted descending
           select classifieds;

Как видите, в моем репозитории есть предложение orderby «жестко запрограммировано».Я просто не знаю код для его динамической реализации?

У кого-нибудь есть идеи?

Спасибо,

1 Ответ

2 голосов
/ 23 июля 2010

Вы можете использовать метод OrderBy (Of TSource, TKey) -Extension и передавать пользовательскую функцию через параметр keySelector.Может быть, этот маленький пример может дать вам представление о том, как начать:

    class A
    {
        public String Foo { get; set; }
        public Int32 Bar { get; set; }
        public override string ToString()
        {
            return Foo + ":" + Bar.ToString();
        }
    }

    static void Main(string[] args)
    {
        var x = new List<A> { new A { Foo = "ABC", Bar = 100 }, new A() { Foo = "ZZZ", Bar = 0 } };
        Func<A, String> order1 = (a) => a.Foo;
        Func<A, Int32> order2 = (a) => a.Bar;

        PrintQuery(x, order1);
        Console.WriteLine();
        PrintQuery(x, order2);
        Console.ReadLine();
    }

    static void PrintQuery<T>(IEnumerable<A> query, Func<A, T> orderFunc)
    {
        foreach (var e in query.OrderBy(orderFunc))
            Console.WriteLine(e);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...