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

如何在Queryable.Join中针对内部表使用WHERE子句?

解决Queryable.Join中过滤内部表的问题

要在Queryable.Join中对内部表(示例中的pets)添加过滤条件,不需要调换表的顺序,有两种实用的实现方式:

方法1:连接前先过滤内部表(推荐)

直接在传入Join方法的内部表参数中添加过滤逻辑,先筛选出符合条件的宠物,再和用户表关联,这种方式能减少参与连接的数据量,性能更优:

Console.WriteLine("querywithwhere");

// 筛选重量小于12磅的宠物后,再执行Join
var querywithwhere = people.AsQueryable()
    .Join(
        pets.Where(pet => pet.WeightInLbs < 12), // 提前过滤内部表pets
        person => person,
        pet => pet.Owner,
        (person, pet) => new { OwnerName = person.Name, Pet = pet.Name, Weight = pet.WeightInLbs }
    );

foreach (var obj in querywithwhere)
{
    Console.WriteLine(
        "Owner {0} - Pet {1} - Pet weight {2} ",
        obj.OwnerName,
        obj.Pet,
        obj.Weight.ToString());
}

执行后输出结果:

Owner Adams, Terry - Pet Barley - Pet weight 10
Owner Adams, Terry - Pet Boots - Pet weight 11

方法2:连接后过滤结果集

如果业务需要先完成所有关联再筛选,可以在Join的结果集后追加Where条件:

var querywithwhere = people.AsQueryable()
    .Join(
        pets,
        person => person,
        pet => pet.Owner,
        (person, pet) => new { OwnerName = person.Name, Pet = pet.Name, Weight = pet.WeightInLbs }
    )
    .Where(result => result.Weight < 12); // 对Join结果过滤重量条件

这种方式会先生成所有用户-宠物的关联记录,再筛选出符合重量要求的条目,数据量较大时性能不如第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:43