Redis Stack .NET分组聚合问题:按SportCode统计赛事及直播数
.NET中Redis Stack实现按SportCode分组统计的解决方案
实体类定义
先确保你的实体类正确配置Redis OM特性:
public class SportsEvent { [RedisIdField] public string Id { get; set; } public string SportCode { get; set; } public string Status { get; set; } // 假设直播状态值为"LIVE" }
正确的聚合实现
使用RedisAggregationSet<T>结合GroupBy和Apply方法,可同时统计每组总赛事数和直播赛事数:
var redisConnection = await RedisConnectionProvider.Instance.GetConnectionAsync(); var aggregationSet = redisConnection.GetRedisAggregationSet<SportsEvent>(); var aggregatedResult = aggregationSet .GroupBy(ev => ev.SportCode) .Apply(group => new { sport = group.SportCode, eventsCount = group.Count(), liveEventsCount = group.Sum(group.Conditional(group.Status == "LIVE", 1, 0)) }) .ToList();
问题原因说明
- 你之前用
RedisAggregationSet时,未充分利用Apply方法的聚合函数:Count()可直接统计每组总数量,Conditional结合Sum能实现直播状态的数量统计。 IRedisCollection<T>定位是CRUD操作,本身不支持复杂分组聚合逻辑,强行使用会触发序列化错误,属于预期行为。
注意事项
确保你的Redis Stack实例已启用RediSearch模块,Redis OM的聚合功能完全依赖该模块。
内容的提问来源于stack exchange,提问作者Daniel Stoyanoff
相关产品推荐
相关产品推荐

