REDIS OM .NET — InvalidOperationException при группировке

Я продолжаю получать это исключение при выполнении простого группового запроса linq с использованием библиотеки Redis OM :

System.InvalidOperationException: «Поиск может выполняться только по объектам, украшенным RedisObjectDefinitionAttribute, который указывает определенный индекс»

Мой код:

      Agents = (RedisCollection<Agent>)RedisProvider.RedisCollection<Agent>();
var groups = Agents.GroupBy(x => x.AccountId);
foreach (var group in groups)
{
   Console.WriteLine($"{group.Key}");
}

Моя индексированная модель:

      [Document(StorageType = StorageType.Json, Prefixes = new[] { "Agent" })]
public class Agent
{
        [RedisIdField]
        [Indexed] public string Id { get; set; }

        [Indexed(Sortable = true, Aggregatable = true)]
        public int AccountId { get; set; }
}

Индекс создается в Redis, и я могу успешно выполнять запросы Where() в Linq для той же коллекции Redis, что интересно, group.Count() также работает правильно. Только когда я пытаюсь перебрать элементы группы, выдается это исключение.

Я немного погуглил, но не могу найти решение или информацию об исключении «Атрибут определения объекта Redis».

1 ответ

Проблема в том, что вы пытаетесь запустить Redis противRedisCollection, это недопустимая операция. Вы можете материализовать свою коллекцию (звонитеToListили какое-либо другое перечисление в нем), перед запуском GroupBy, или вы можете запустить a в контексте RedisAggregationSet, что позволит вам выполнять сокращения для него .

Компромисс здесь заключается в том, что если вы хотите запуститьGroupByпосле материализации вам придется вернуть весь набор результатов обратно и заставить ваше приложение объединить все в группу. Если вы сделаете это в контекстеRedisAggregationSet, вся обработка может выполняться на стороне сервера.

Другие вопросы по тегам