C# AspNetCore.OData在简单$apply(groupby())上给出比较错误

C# AspNetCore.OData在简单$apply(groupby())上给出比较错误,c#,odata,asp.net-core-webapi,C#,Odata,Asp.net Core Webapi,我试图以最简单的方式使用$apply(groupby())来获取属性的不同值,但Microsoft OData抛出了一个关于“比较运算符”的NotSupportedException 我将ASP.NET Core 2.2.0与Microsoft.AspNetCore.OData 7.1.0一起使用。我使用非常简单的Linq到SQL注释运行MSSQL数据库。我有一个对象,称为位置: [表(Name=“位置”)] 公共类位置 { [列(Name=“LocationId”,IsPrimaryKey=t

我试图以最简单的方式使用$apply(groupby())来获取属性的不同值,但Microsoft OData抛出了一个关于“比较运算符”的NotSupportedException

我将ASP.NET Core 2.2.0与Microsoft.AspNetCore.OData 7.1.0一起使用。我使用非常简单的Linq到SQL注释运行MSSQL数据库。我有一个对象,称为位置:

[表(Name=“位置”)]
公共类位置
{
[列(Name=“LocationId”,IsPrimaryKey=true)]
public int LocationId{get;set;}
[列(Name=“Name”)]
公共字符串名称{get;set;}
[列(Name=“PersonResponsible”)]
公共字符串PersonResponsible{get;set;}
}
我的控制器方法同样简单:

[ApiController]
公共类位置控制器:ODataController
{
[启用查询]
公共IQueryable Get()
{
返回DataContextFactory.GetContext().GetTable();
}
}
DataContextFactory.GetContext()
只是一个包装器,用于使用适当的
SqlConnection
创建新的
DataContext

我再次设置了EDM模型,非常简单:

private静态IEdmModel GetedModel()
{
ODataConventionModelBuilder=新ODataConventionModelBuilder();
建造商实体集(“位置”);
返回builder.GetEdmModel();
}
我可以$filter、$select,毫无问题地查看$metadata。然后我尝试使用
http://server/odata/Locations?$apply=groupby((PersonResponsible))
我在浏览器中看到了如下损坏的JSON:

{@odata.context”:http://server/odata/$metadata#位置(负责人)”,“值”:[

我在服务器控制台中看到以下错误:

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通常可以正常工作。

我用ASP.NET Core 2.2和OData 7.1.0试过你的代码,但是查询
?$apply=groupby((PersonResponsible))
对我来说很好。是否有最小限度的演示可以复制?很抱歉耽搁了这么长时间。请尝试查看
https://github.com/bschuth/OdataApplyGroupDefect.git
。请注意,我已经确定问题只发生在SQL Server上;内存中的OData是可以的。Linq-to-SQL(
System.Data.Linq.DataContext
)使用
OData
时不完全支持。请将代码更改为使用
EF-Core
,这对我来说很好。谢谢。不幸的是,我们使用的代码库不使用EF,因此这不是一个选项。是否有官方声明说OData不完全支持LINQ to SQL,我没有意识到这是真的。我可以确认用EF Core重写我的示例效果很好。在我确认这不可能之前,我想看看是否有关于OData对Linq to SQL的支持的正式声明。我用ASP.NET Core 2.2和OData 7.1.0尝试了你的代码,但是查询
?$apply=groupby((PersonResponsible))
对我来说很好。是否有最小限度的演示可以复制?很抱歉耽搁了这么长时间。请尝试查看
https://github.com/bschuth/OdataApplyGroupDefect.git
。请注意,我已经确定问题只发生在SQL Server上;内存中的OData是可以的。Linq-to-SQL(
System.Data.Linq.DataContext
)使用
OData
时不完全支持。请将代码更改为使用
EF-Core
,这对我来说很好。谢谢。不幸的是,我们使用的代码库不使用EF,因此这不是一个选项。是否有官方声明说OData不完全支持LINQ to SQL,我没有意识到这是真的。我可以确认用EF Core重写我的示例效果很好。在我确认这不可能之前,看看是否有关于OData支持Linq to SQL的正式声明。