2013-08-03 41 views
5

我是新來的MVC。mvc剃刀foreach與排序數據

我想實現我的html頁面上的數據排序。 我有一個與此代碼生成的模型:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        select g; 
    return results; 
} 

和一個視圖:

@model IEnumerable<PercConfigEntry> 
@foreach (var config in Model) 
{ 
    ... 
} 

這工作。但是當我添加「orderby」來這樣查詢時:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        orderby g.ConfigName 
        select g; 
    return results; 
} 

它在每個foreach上拋出DataServiceQueryException。

怎麼了?

在此先感謝。

+0

我懷疑這與MVC或剃鬚刀有什麼關係。我的猜測是這是你的數據服務的查詢提供者的問題。如果你在'GetPercConfigEntries()'內部調用'ToList()',那麼就會發生異常。 –

+0

嘗試調用'ToList()',然後使用類似'results.OrderBy(x => x.ConfigName)' – Nilesh

+0

'var results =(從g.in.context.PercConfigEntry 其中g.Key ==「 ConfigEntries「 select g).OrderBy(o => o.ConfigName);' – christiandev

回答

2

該問題與您的查詢提供程序有關;也許它根本不支持排序。沒有任何進一步的信息,我建議你這樣:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = 
     (from g in this.context.PercConfigEntry 
     where g.Key == "ConfigEntries" 
     select g) 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

或者用流利的語法:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = this.context.PercConfigEntry 
     .Where(g => g.Key == "ConfigEntries") 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

這迫使查詢要在供應商任何順序執行,而不,然後重新排序它在客戶端—換句話說,對AsEnumerable的調用有效地將結果集與查詢提供者斷開連接,以便在客戶端上評估OrderBy(或任何後續方法)。這可能不像允許提供者訂購它那麼高效,但如果提供者不支持排序,這是執行此操作的唯一方法。