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

用LINQ方法语法实现左连接 无匹配项时返回自定义提示文本

问题原因

你当前使用的Join方法属于LINQ的内连接,仅会返回左右两边匹配成功的条目,因此没有对应产品的分类会被直接过滤掉。要实现需求的左外连接效果,需要改用GroupJoin方法搭配DefaultIfEmpty处理无匹配的场景。

另外你原有代码的关联键存在错误:产品侧的关联选择器product => product是直接拿Product对象和分类字符串匹配,永远无法命中,需要改为产品对应的分类属性,假设Product类的分类字段为Category。

调整后的完整代码

public static IEnumerable<(string category, string productName)> LeftOuterJoin()
{
    string[] categories =
    {
        "Beverages",
        "Condiments",
        "Vegetables",
        "Dairy Products",
        "Seafood"
    };

    List<Product> products = Products.ProductList;

    return categories
        // 左表是分类,和产品做分组连接,得到每个分类对应的产品组
        .GroupJoin(
            products, 
            category => category, 
            product => product.Category, // 产品侧取分类字段做关联键,属性名不匹配可自行修改
            (category, productGroup) => new { category, productGroup })
        // 拆分分组,对无产品的组返回默认值(null)保证分类不丢失
        .SelectMany(
            joinResult => joinResult.productGroup.DefaultIfEmpty(),
            (joinResult, product) => new 
            { 
                joinResult.category, 
                ProductName = product == null ? "(No Products)" : product.ProductName 
            })
        // 投影为要求的元组类型
        .Select(res => (res.category, res.ProductName));
}

效果说明

上述代码会完整返回所有分类:

  • 分类下有多个产品的会拆分出多条对应记录
  • 分类下无产品的会自动补(No Products)作为产品名,符合你给出的输出格式要求
  • 全程使用方法语法实现,返回类型完全匹配要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:06:03