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

LINQ实现SQL IN子句报错:int?无Contains方法的技术求助

解决LINQ中用Contains实现SQL IN子句的报错问题

你报错的核心原因是搞反了Contains的调用对象:Contains是集合类型的方法,用来判断单个元素是否属于该集合,而不是把它用在单个的int?类型字段上。

要实现你要的SQL IN (1,2,3)效果,正确的做法是:

  1. 先定义一个包含目标值的集合
  2. 调用这个集合的Contains方法,传入doc.Row1作为判断的元素

完整代码示例

首先定义目标值集合:

var targetIds = new List<int> { 1, 2, 3 };

查询表达式写法

var count = await (from doc in _Context.Document
                   where targetIds.Contains(doc.Row1.Value)
                   select doc).CountAsync();

方法链写法(更简洁)

var count = await _Context.Document
                          .CountAsync(doc => targetIds.Contains(doc.Row1.GetValueOrDefault()));

注意事项

因为Row1是可空整数(int?),处理时要注意null的情况:

  • 如果业务逻辑中Row1不会为null,直接用.Value即可
  • 如果需要兼容null(比如不想匹配null值),可以用.GetValueOrDefault()将null转为0,或者添加额外的null判断(比如doc.Row1 != null && targetIds.Contains(doc.Row1.Value))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:57:10