var searchTextArray = searchText.Split(' ');var result = entitIEs.Titles.Where(x => searchTextArray.Contains(x.Titlename));
假设searchText包含“Loneliness Management”字符串,那么我想获得包含Titlename的所有标题的任何单词.
在这种情况下,我应该得到Titlenames为的标题
Some loneliness affect allLoneliness is painfulSchool ManagementProper management
…
更新1:
上面的查询生成sql为
SELECT * FROM Titles WHERE (LOWER(Titlename) IN (N'loneliness',N'management')) AND (LOWER(Titlename) IS NOT NulL)
但我想生成像as的查询
SELECT * FROM Titles WHERE Titlename like N'%loneliness%' or Titlename like N'%management%'
我在上面的表达中缺少什么?
更新2
我得到了@ 3dGrabber答案的预期输出但仍然生成的SQL查询比T-sql中的liKE运算符有点乱.非常感谢你们.生成的sql现在就像
SELECT * FROM [dbo].[Titles] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM (SELECT N'loneliness' AS [C1] FROM ( SELECT 1 AS X ) AS [SingleRowtable1] UNION ALL SELECT N'management' AS [C1] FROM ( SELECT 1 AS X ) AS [SingleRowtable2]) AS [UnionAll1] WHERE ( CAST(CHARINDEX([UnionAll1].[C1],LOWER([Extent1].[Titlename])) AS int)) > 0 )解决方法 不确定EF是否可以转换所有使用的 *** 作,但这是我在linq-to-Objects中要做的事情:
var searchText = "Loneliness Management";var searchTerms = searchText.Tolower().Split(' ');var entitIEs = new [] { "Some loneliness affect all","Loneliness is painful","School Management","No match here","Maybe the next one?","Proper management" };var Titles = entitIEs.Select(t => t.Tolower());var result = Titles.Where(t => searchTerms.Any(s => t.Contains(s)));
如果您需要不区分大小写的搜索,请确保EF支持它,或者首先将数据小写放入DB中.否则你可能会遇到性能问题.
@H_502_2@ 总结以上是内存溢出为你收集整理的如何让所有标题匹配C#titleNames中至少一个单词全部内容,希望文章能够帮你解决如何让所有标题匹配C#titleNames中至少一个单词所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)