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

LINQ左连接中Count函数工作原理及sp集合结构解析

LINQ分组查询疑问解答

首先贴出查询代码:

var productsPerSupplier = from s in suppliers
                          join p in products
                          on s.Id equals p.SupplierId
                          into sp
                          select new
                          {
                              SupplierId = s.Id,
                              SupplierName = s.Name,
                              ProductCount = sp.Count()
                          };

1. Count函数如何统计每个供应商的产品数量?

这段用的是LINQ的分组连接(Group Join),逻辑是逐个遍历suppliers里的每个供应商s。join...into sp会把所有和当前供应商s匹配(p.SupplierId == s.Id)的产品,打包成专属集合sp。所以sp.Count()就是统计当前供应商对应产品集合的元素数,自然能得到每个供应商的产品数量。

2. 临时集合sp的结构是什么?

sp是IEnumerable<Product>类型的集合(假设products集合存的是Product对象),它只包含当前遍历到的供应商s对应的所有产品——也就是所有SupplierId等于s.Id的产品实例。每个供应商都会对应一个独立的sp集合,彼此没有交集。

3. 为什么不会统计全表所有行数?

因为这里的Count()是调用在单个供应商对应的分组集合sp上,而非整个products表。如果直接写products.Count()才会统计全表行数,但join...into已经把产品按供应商分好组,每个sp都是单个供应商的专属产品子集,所以统计的是子集的元素数,不是全表总数。

查询结果描述

查询返回的是匿名类型集合,每一项包含三个属性:

  • SupplierId:供应商ID
  • SupplierName:供应商名称
  • ProductCount:该供应商的产品数量
    最终呈现的是每个供应商及其对应产品数量的列表,比如部分行可能是:供应商ID为1,名称为"Exotic Liquid",产品数量3;供应商ID为2,名称为"New Orleans Cajun Delights",产品数量5等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:01:33