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

将SQL查询转LINQ遇long类型无Contains定义报错求助

解决LINQ转换中的Contains调用错误问题

嘿,我来帮你搞定这个问题!你遇到的「long类型不包含Contains定义」错误,核心原因是搞反了Contains的调用对象——c.MemId是单个的long值,而listmemsmemIds是long类型的集合,Contains是集合的方法,应该是「集合.Contains(单个值)」,而不是反过来。

先修正你原来的代码

你只需要把最后一行的判断逻辑反过来写,就能解决错误:

// 第一步:筛选Profile_Pic不为空的注册记录
var reglist = objentity.Tbl_Vulpith_Registration.Where(a => a.Profile_Pic != null);
// 第二步:获取服务表中所有的MemId集合(ToList()会把数据加载到内存)
var listmemsmemIds = objentity.Tbl_List_Services.Select(b => b.MemId).ToList();
// 第三步:正确判断MemId是否在集合中
var finalist = reglist.Where(c => listmemsmemIds.Contains(c.MemId)).ToList();

更优化的写法(贴近原SQL的子查询)

如果你不想提前把MemId加载到内存,可以直接让EF生成和原SQL一致的IN子查询,这样数据库会直接处理子查询逻辑,性能更优:

var finalist = objentity.Tbl_Vulpith_Registration
    .Where(a => a.Profile_Pic != null 
             && objentity.Tbl_List_Services.Select(b => b.MemId).Contains(a.MemId))
    .ToList();

另一种高效写法:使用Join

因为两张表通过MemId关联,用Join也是一个不错的选择,尤其是当MemId字段有索引时,查询性能会很好:

var finalist = from reg in objentity.Tbl_Vulpith_Registration
               join service in objentity.Tbl_List_Services on reg.MemId equals service.MemId
               where reg.Profile_Pic != null
               select reg;

这几种写法都能实现你原SQL的逻辑,你可以根据实际的数据量和性能需求选择合适的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:51:12