2010-07-23 56 views
0

我已經實現了尋呼的書呆子晚餐方法 - 這非常棒。但我希望能夠動態地按照certian字段進行排序。Nedd Dinner pagginated list - 如何添加linq orderby子句dynamicaly?任何人?

我將如何去實現這一點。這是我的代碼?

控制器:

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; 

正如你可以看到我有排序依據條款 「硬編碼」 到我的倉庫。我只是不知道動態實現它的代碼?

任何人有什麼想法?

感謝,

+0

如果你告訴我你的函數的分類類型和方法簽名,我可以給你一個更好的例子。 – sloth 2010-07-23 11:48:47

回答

2

您可以使用OrderBy(中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<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); 
    } 
+0

非常感謝你這個例子足以讓我想出我自己的解決方案。非常感謝。 – SimonGates 2010-07-23 14:06:19