如何查询包含任何一组字符串中的一个或多个的项目(以能够转换为SQL的方式)?

28 浏览
0 Comments

如何查询包含任何一组字符串中的一个或多个的项目(以能够转换为SQL的方式)?

我有两个列表:

  1. 带有评论字段的主列表
  2. 要搜索的关键字列表

我想在每个记录的评论字段中搜索关键字,使用SQL语句如下所示:

select * from MainList
where Comment like '%keyword1%'
or Comment like '%keyword2%'
... 一直到最后一个关键字。

到目前为止,我看到的例子通常只能一次搜索一个关键字

例如:LINQ with non-lambda for Any Contains

我希望能够同时搜索每个关键字在MainList中的每个记录。

类似于:

var newList = MainList.Where(m => m.Comments.Contains(purposes))

我更喜欢使用lambda语法来完成,但如果不可能,LINQ也可以。

0
0 Comments

问题的出现原因是用户想要查询包含给定字符串列表中任意一个或多个字符串的项目的方法,而且希望这种方法可以转化为SQL语句。

问题的解决方法是使用LINQ查询和Lambda表达式来实现。代码示例中的Where方法和Any方法结合使用,可以过滤出包含任意一个字符串的项目。同时,Contains方法用于检查字符串是否包含指定的关键字。

然而,这种解决方法在EF Core 5中似乎不起作用。可能是由于EF Core 5与之前版本的不同,导致该查询方法无法正常工作。

需要进一步研究和尝试其他解决方案来解决这个问题。

0
0 Comments

问题的出现原因是用户想要查询包含一个或多个字符串的项的方法。

解决方法是添加一个扩展方法,可以帮助生成这样的谓词。使用方法很简单,将关键字列表传递给扩展方法,指定匹配条件,然后将结果转换为列表。

实现的方法是,根据关键字列表构建表达式,将其应用于每个项,并将它们连接在一起。例如,如果关键字列表包含keyword1、keyword2和keyword3,那么生成的表达式相当于m => m.Comments.Contains(keyword1) || m.Comments.Contains(keyword2) || m.Comments.Contains(keyword3)。

某些情况下可以使用LinqKit包中的PredicateBuilder来实现动态个数的析取。但是,也有人认为这个实现更加简洁有效,避免了额外的依赖和循环迭代。

虽然有人认为这个代码片段可能会导致维护困难,但也有人认为它已经在其他项目中使用多年,并且功能正常。

总结起来,这个问题的解决方法是通过添加一个扩展方法来生成查询项的谓词,方法使用简单且功能有效。尽管有人对代码的复杂性和维护性提出了疑问,但也有人认为这个实现已经经过多年验证并且运行良好。

0