mvc razor foreach在视图中排序数据

Max*_*Max 5 c# foreach razor asp.net-mvc-4

我是MVC的新手.

我想在我的html页面上实现数据排序.我有一个使用此代码生成的模型:

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

并且观点:

@model IEnumerable<PercConfigEntry>
@foreach ( var config in Model )
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

这有效.但是当我添加"orderby"来查询时:

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

它会在foreach上抛出DataServiceQueryException.

怎么了?

提前致谢.

p.s*_*w.g 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;
}
Run Code Online (Sandbox Code Playgroud)

或者用流畅的语法:

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

这会强制查询在没有任何排序的情况下在提供程序上执行,然后在客户端上重新排序,换句话说,调用AsEnumerable有效地断开结果集与查询提供程序的连接,以便对OrderBy(或任何后续方法)进行评估在客户端上。这可能不如允许提供商订购那么有效,但如果提供商不支持订购,这是唯一的方法。