2011-04-07 77 views
0

我有一個實體映射到我的數據庫中,可以使用下面的代碼獲得查詢列表:如何對來自EF查詢的結果列表進行排序?

Dim Teams As New List(Of Team) 

Teams = (From t In sdContext.Teams _ 
     Order By t.Name _ 
     Select t).ToList() 

我想要做的是參數化這個查詢排序結果。有時用戶會根據名稱對其進行分類,有時根據說明進行分類,有時根據電子郵件地址進行分類。

我不認爲我可以正確設置EF查詢來排序結果,所以我正在尋找列表中的結果進行排序。我怎樣才能做到這一點? EF已經具有IComparer或Predicate函數嗎?

回答

1

它看起來像一個類似的問題,有人問here與此msdn article

ObjectQuery<Teams> teamsQuery = db.Teams.OrderBy("it.Name"); 
List<Teams> teams = teamsQuery.ToList(); 
+0

這個伎倆!我原來的嘗試並沒有從上下文中正確地拉取ObjectQuery,但使用上面的代碼允許我這樣做。謝謝! – 2011-04-07 16:59:27

0

您可以使用命令傳遞到排序依據LINQ方法的斷言:

var list = sdContext.Teams.OrderBy(t => t.Name).ToList() 

或者從你原來的語句的輸出以及只是爲了創建列表。

+0

的引用。如果我想t.Name被一個參數傳遞,將相同的語法的工作? – 2011-04-07 16:02:05

+0

不要相信。 t.Name在編譯時已知,因爲它推斷了上下文。您可以使用switch語句來確定要排序的屬性。 – tomasmcguinness 2011-04-07 16:03:52

0

你可以在數據庫中進行排序。我想創建一個類OrderSortCriteria

public class OrderSortDefinition{ 
    public bool ByName { get; set;} 
    public bool ByEmail { get; set; } 
    public bool ByDescription { get; set; } 
} 

建設我的查詢,添加適當的排序時,我會用這個。

public IList<Team> GetSortedTeams(OrderSortDefinition sortOrder){  
    var teams = from t in sdContext.Teams 
       select t; 
    if(sortOrder.ByEmail){ 
     return teams.OrderBy(t=>t.Email).ToList(); 
    } 

    // repeat for each field. 
} 

,如果你需要支持排序多個字段你可以讓你的OrderSortDefinition更加複雜。

相關問題