LINQ中字符串字段的IN sql运算符的替代方法是啥?
Posted
技术标签:
【中文标题】LINQ中字符串字段的IN sql运算符的替代方法是啥?【英文标题】:What is the alternative for IN sql operator in LINQ for string field?LINQ中字符串字段的IN sql运算符的替代方法是什么? 【发布时间】:2021-10-16 22:10:53 【问题描述】:请在下面找到我想要实现的示例。
List<string> list = new List<string>() "Test", "Test1", "Test2","Test","Test1" ;
SQL = select * from table_name
where column_name IN ("Test","Test1");<br/>
output = "Test","Test1","Test","Test1"
LINQ= from x in list where list.Contains("Test","Test1") select x
output = "Test", "Test1", "Test2","Test","Test1"
包含不完全匹配。 我们如何在 LINQ 中使用字符串列表获得与 SQL IN 运算符相同的输出?
谢谢
【问题讨论】:
你可以使用Contains
或Any
它应该会给你类似的结果。
LINQ 语句不是您想要的。 where list.Contains("Test","Test1")
总是正确的。
【参考方案1】:
您使用 Contains 不正确(实际上,您的示例代码无法编译)。相反,声明一个您希望匹配的集合并在该集合上使用 Contains,如下所示:
List<string> list = new List<string>() "Test", "Test1", "Test2","Test","Test1" ;
var match = new HashSet<string>() "Test", "Test1" ;
var result = from x in list where match.Contains(x) select x;
结果:
Test
Test1
Test
Test1
【讨论】:
请注意,您可以创建match
内联(不是很简洁地认为是 HashSet
)而不会影响性能(在这个小例子中):new[] "Test", "Test1" .Contains(x)
是的,我确实经常这样做。我认为单独的声明会更容易理解。
我同意它更容易理解,但可能不像 SQL。【参考方案2】:
与 Eric 的答案类似但使用连接的方法:
var list = new List<string>() "Test", "Test1", "Test2","Test","Test1" ;
var match = new HashSet<string>() "Test", "Test1" ;
var results = from x in list
join y in match on x equals y
select x;
【讨论】:
以上是关于LINQ中字符串字段的IN sql运算符的替代方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
SQL --------------- 运算符 = 与 in