我尝试让这个工作起来。查询返回所有行,即使我只指定一个 (?$select=title)。在webapiconfig上,我有:
var queryAttribute = new QueryableAttribute()
{
AllowedQueryOptions = AllowedQueryOptions.All
};
config.EnableQuerySupport(queryAttribute);
控制器的样子如下:
public override IQueryable<_person_TITLE> Get()
{
return db.personTitle.AsQueryable();
}
protected override _person_TITLE GetEntityByKey(int key)
{
return db.personTitle.FirstOrDefault(p => p.person_TITLE_ID == key);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
编辑: 经过进一步的研究,我发现$select从未被官方实现过。这就是为什么默认情况下在AllowedQueryOptions中没有开启它的原因。
那么,这意味着什么呢?拥有这个选项非常关键。没有这个选项,将odata web api投入生产将是愚蠢的。编写自己的处理程序会抵消使用web api的初衷。