我是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。
出了什么问题?
提前致谢。
答案 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
(或任何后续方法)。这可能不如允许提供程序订购它有效,但如果提供程序不支持订购,这是唯一的方法。