В моем приложении Graphql HotChocolate на С# (HotChocolate.AspNetCore версия 13.5.1) у меня есть следующий класс, содержащий Enumerable с DateTimes.
public class MyData {
...
public IEnumerable<DateTime> MyDates { get; set; } = new List<DateTime>();
}
Я хочу получить все записи, в которых myDates содержит запись между двумя конкретными датами. Для этого я пытаюсь выполнить следующий запрос на своей игровой площадке.
query {
getMyData
(first: 10,
where: { myDates: { some: {gt: "2016-02-23", lt: "2016-02-25"}}})
{ ... }
}
Примеры:
MyDates: [ "2016-02-22", "2016-02-24", "2016-02-26"] должны быть найдены.
MyDates: [ "22 февраля 2016", "26 февраля 2016"] не должны быть найдены.
Проблема в том, что обе записи найдены, потому что каким-то образом «gt» и «lt» выполняются как ИЛИ, а не как И.
Мой запрос настроен следующим образом:
[ExtendObjectType("Query")]
public class MyDataQuery
{
[UsePaging(IncludeTotalCount = true)]
[UseFiltering]
[UseSorting]
public IQueryable<MyData> GetMyData([Service] ISomeService service)
{
if (service == null) throw new ArgumentNullException(nameof(service));
return service.GetMyData());
}
}
В моем Program.cs:
builder.Services.AddGraphQLServer()
.AddQueryType(d => d.Name("Query"))
.AddTypeExtension<MyDataQuery>()
.AddProjections()
.AddFiltering()
.AddSorting()
.ModifyRequestOptions(opt => opt.IncludeExceptionDetails =
true);
Не могли бы вы поделиться дополнительной информацией о вашей конфигурации HotChocolate?
Какую конфигурацию вы ищете?^^
Самое смешное, что у меня есть еще одно свойство внутри класса MyData — DateTime. Когда я вызываю комбинацию gt/lt для этого свойства, все работает нормально. Просто массив, кажется, создает проблему
Как формируется запрос? Используете ли вы аннотации или сначала код при настройке запроса? Какую версию HotChocolate вы используете?
Давайте продолжим обсуждение в чате.





Дело закрыто.
Фильтрация работала нормально. Мне не хватало свойства внутри определения моей сущности HasKey(). Поэтому связь HasMany всегда имела только одну запись внутри перечислимого myDates.
Похоже, фильтрация не сработала, но HotChocolate каким-то образом нашел нужные записи, но не хватало некоторых записей myDates.
Я установил быстрый экземпляр HotChocolate с предоставленной вами информацией, но не могу воспроизвести проблему. Если я запускаю тот же запрос (без
first), я получаю только тот элемент, даты которого находятся в диапазоне gt/lt.query { myData (where: { myDates: { some: {gt: "2016-02-23", lt: "2016-02-25"}}}) { myDates } }