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

如何使用Entity Framework LINQ统计CSV关联的子表项所属包数量

实现方案

你只需要在Count的条件里做CSV格式的精确匹配即可,避免ID部分匹配的问题,代码如下:

using(var db = new DBContext())
{
    var output = (from s in db.Services
                  select new 
                  {
                      s.ID,
                      s.ServiceName,
                      Packages = $"({db.Packages.Count(p => ("," + p.Services + ",").Contains("," + s.ID.ToString() + ","))}) Packages"
                  }).ToList();
}

逻辑说明

  • 我们把Package的Services字段前后都拼接上逗号,同时把当前Service的ID也前后拼接逗号,再判断包含关系,比如ID为1的服务会匹配,1,,不会误匹配到ID为11、21这类包含数字1的ID
  • 该写法在EF Core 3.0+版本中可以直接被翻译成原生SQL执行,不需要把全表数据加载到内存计算,性能可控

优化建议

如果业务允许的话更建议调整表结构,新增PackageServiceRel中间表存储两者的多对多关联关系,替代CSV存储关联ID的方案,既符合数据库设计范式,也能大幅提升关联查询的性能,尤其是数据量较大的时候优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:45:07