5

我是 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 )
{
   ...
}

这行得通。但是当我添加“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。

怎么了?

提前致谢。

4

1 回答 1

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评估(或任何后续方法)在客户端。这可能不如允许供应商订购它有效,但如果供应商不支持订购,这是唯一的方法。

于 2013-08-03T17:24:53.807 回答