我刚刚开始使用Asp.Net Web API开始使用OData。
我在WebApiConfig.cs中声明
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Staff>("staffs");
return builder.GetEdmModel();
在StaffsController.cs
public class StaffsController : ODataController
{
UnitOfWork unitOfWork;
public StaffsController()
{
this.unitOfWork = new UnitOfWork();
}
[EnableQuery]
public IHttpActionResult Get()
{
var q = this.unitOfWork.StaffRepository.Data.Select(p => new { p.Name, p.Id, p.Ext });
// Or Grouping here to return a Complex Type
return Ok(q);
}
}
它返回406错误,但如果我改变
var q = this.unitOfWork.StaffRepository.Data.Select(p => new { p.Name, p.Id, p.Ext });
// Or Grouping here to return a Complex Type
到
var q = this.unitOfWork.StaffRepository.Data;
有效。
我已经在Google上搜索了一段时间但仍未找到任何内容。如果我们可以做到这一点,或者我们有其他方法可以帮助我,你能帮助我吗?
答案 0 :(得分:0)
传递给SELECT iif(ArbPlWPos like "IH-MVK*", "IH-MKE", left(ArbPlWPos, 6)),
count(*)
FROM TABLE
GROUP BY iif(ArbPlWPos like "IH-MVK*", "IH-MKE", left(ArbPlWPos, 6));
的通用参数的类型 - 在您的情况下为builder.EntitySet
- 需要匹配从Staff
方法返回的对象。由于您使用了Get
,因此变量Staff
必须属于q
类型。
IQueryable<Staff>
属性属于这种类型,因此它可以正常工作,但是显然不起作用的版本的匿名类型不是这样,它不起作用。
继续发表评论
我想获取包含一些统计数据的员工信息列表
为了向响应添加不同的属性,您需要创建一个新的对象类型,并将其传递到Data
泛型参数,然后在控制器的builder.EntitySet
语句中创建它。
但是,您在示例中所做的事情似乎只是返回Select
对象上已有的属性。您可以使用OData Staff
语句来执行此操作。例如:
$select