mvc razor foreach在视图中排序数据

时间:2013-08-03 17:01:24

标签: c# asp.net-mvc-4 razor foreach

我是MVC的新手。

我想在我的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 )
{
   ...
}

这很有效。但是当我添加&#34; orderby&#34;像这样查询:

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。

出了什么问题?

提前致谢。

1 个答案:

答案 0 :(得分: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(或任何后续方法)。这可能不如允许提供程序订购它有效,但如果提供程序不支持订购,这是唯一的方法。