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.
怎么了?
提前致谢.
该问题与您的查询提供程序有关;也许它根本不支持订购。如果没有任何进一步的信息,我推荐这个:
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(或任何后续方法)进行评估在客户端上。这可能不如允许提供商订购那么有效,但如果提供商不支持订购,这是唯一的方法。