Я пытаюсь использовать $ apply (groupby ()) самым простым способом для получения различных значений свойства, но Microsoft OData выдает NotSupportedException об «операторах сравнения».
Я использую ASP.NET Core 2.2.0 с Microsoft.AspNetCore.OData 7.1.0. Я работаю с базой данных MSSQL, используя очень простые аннотации Linq-to-SQL. У меня есть один объект, который называется Location:
[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, посмотреть $ метаданные без проблем. Затем я пытаюсь получить все отдельные значения «PersonResponsible» с помощью http://server/odata/Locations?$apply=groupby((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, обычно работают нормально.