LINQ实现SQL IN子句报错:int?无Contains方法的技术求助
解决LINQ中用Contains实现SQL IN子句的报错问题
你报错的核心原因是搞反了Contains的调用对象:Contains是集合类型的方法,用来判断单个元素是否属于该集合,而不是把它用在单个的int?类型字段上。
要实现你要的SQL IN (1,2,3)效果,正确的做法是:
- 先定义一个包含目标值的集合
- 调用这个集合的
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
相关产品推荐
相关产品推荐

