0


1

オタクディナーpagginatedリスト-動的にlinq orderby句を追加する方法 誰でも?

私はオタクディナーのページングの方法を実装しました。 しかし、certianフィールドで動的に注文できるようにしたいです。

これをどのように実装しますか? ここに私のコードはありますか?

コントローラ:

 PaginatedList pageOfClassifieds = new PaginatedList(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 Answer


2


OrderBy(Of TSource、TKey)-Extensionmethodを使用して、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 { new A { Foo = "ABC", Bar = 100 }, new A() { Foo = "ZZZ", Bar = 0 } };
        Func order1 = (a) => a.Foo;
        Func order2 = (a) => a.Bar;

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

    static void PrintQuery(IEnumerable query, Func orderFunc)
    {
        foreach (var e in query.OrderBy(orderFunc))
            Console.WriteLine(e);
    }