我试图以最简单的方式使用$ apply(groupby())来获取属性的不同值,但是Microsoft OData抛出了有关“比较运算符”的NotSupportedException。
我正在将ASP.NET Core 2.2.0与Microsoft.AspNetCore.OData 7.1.0一起使用。我正在使用非常简单的Linq-to-SQL注释针对MSSQL数据库运行。我有一个称为位置的对象:
[Table(Name = "Locations")]
public class Location
{
[Column(Name = "LocationId", IsPrimaryKey = true)]
public int LocationId { get; set; }
[Column(Name = "Name")]
public string Name { get; set; }
[Column(Name = "PersonResponsible")]
public string PersonResponsible { get; set; }
}
我的控制器方法同样简单明了:
[ApiController]
public class LocationsController : ODataController
{
[EnableQuery]
public IQueryable<Location> Get()
{
return DataContextFactory.GetContext().GetTable<Location>();
}
}
DataContextFactory.GetContext()
只是使用适当的DataContext
创建新的SqlConnection
的包装。
我再次设置了EDM模型,非常简单:
private static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Location>("Locations");
return builder.GetEdmModel();
}
我可以$ filter,$ select毫无问题地查看$ metadata。然后,我尝试使用http://server/odata/Locations?$apply=groupby((PersonResponsible))
获取所有不同的“ PersonResponsible”值,在浏览器中出现如下所示的JSON损坏:
({{"@odata.context":"http://server/odata/$metadata#Locations(PersonResponsible)","value":[
)
我在服务器控制台中看到以下错误:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.NotSupportedException: Comparison operators not supported for type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]'.
我在这方面还很陌生,想知道我是否缺少一些关键的东西-在github仓库中,我看不到任何类似的问题,还有一些其他建议$ apply通常可以正常工作的问题。