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
, вся обработка может выполняться на стороне сервера.