如何在LINQ的Where条件中使用IN?是否应使用Contains?
LINQ实现SQL IN功能的正确方式
没错,LINQ里实现SQL的IN逻辑,就是用Contains方法——你写的代码里直接写IN是错误的,C#没有这个语法。
正确的写法分两步:
- 先定义要匹配的目标值集合:
var targetDuties = new List<int> { 1, 3, 29, 206 };
- 在LINQ查询中用
Contains替代IN:
var updateLaqTasks = dbContext.Tasks.SingleOrDefault( p => p.Room == roomId && targetDuties.Contains(p.Duty) );
补充说明
- 如果你用的是Entity Framework这类ORM,这段LINQ会被自动翻译成SQL的
IN子句,和你给出的SQL示例逻辑完全一致:SELECT * FROM laqTasks t WHERE t.Room = @roomId AND t.Duty IN (1,3,29,206) - 要注意集合的类型必须和
p.Duty的类型一致(比如这里都是int),不然会出现类型不匹配的错误。
内容的提问来源于stack exchange,提问作者shanthakumar n
相关产品推荐
相关产品推荐

