You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

问题原因说明

  1. 你之前用RedisAggregationSet时,未充分利用Apply方法的聚合函数:Count()可直接统计每组总数量,Conditional结合Sum能实现直播状态的数量统计。
  2. IRedisCollection<T>定位是CRUD操作,本身不支持复杂分组聚合逻辑,强行使用会触发序列化错误,属于预期行为。

注意事项

确保你的Redis Stack实例已启用RediSearch模块,Redis OM的聚合功能完全依赖该模块。

内容的提问来源于stack exchange,提问作者Daniel Stoyanoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:15:32