c# - 使用 LOOP 和数组的 SQL 搜索

标签 c# sql linq

<分区>

我想做一个在表中搜索的查询,但不像你想象的那么简单。

我有一个混合数组(例如,搜索键是'second world war',我由此创建了'second','second world','second world war','war second'等混合数组。 ) 我想从中获得最佳匹配。我的想法是通过一个循环遍历数组并比较两个单词的字符,然后将百分比结果放入一列,而不是按计算出的百分比对结果进行排序。

我找到了一个计算百分比的函数,但如何创建遍历数组并调用该函数的查询?

抱歉,我的 sql 还不够好:/

SELECT 
    P.FullName, 
    K.Shortname, 
    (P.VoteSumm / P.VoteCount) AS Rate, 
    [dbo].GetPercentageOfTwoStringMatching](P.FullName, CurrentName)
FROM [Test].[dbo].Table1 AS P
    LEFT OUTER JOIN [Test].[dbo].Table2 AS UC ON UC.ID = P.UcID
    LEFT OUTER JOIN [Test].[dbo].Table3 AS K ON K.ID = P.KarID
    LEFT OUTER JOIN [Test].[dbo].Table4 AS PV ON PV.OwnerID= P.ID
WHERE
    (P.Deleted IS NULL) 
    AND
    (P.FullName LIKE '%kiss%' 
        OR P.FullName LIKE '%kisstamás%' 
        OR P.FullName LIKE '%tamás%') 
    OR 
    (P.Email IN ('kiss','kiss tamás','tamás') 
        OR UC.ShortName IN ('kiss','kiss tamás','tamás') 
        OR UC.Name IN ('kiss','kiss tamás','tamás') 
        OR K.ShortName IN ('kiss','kiss tamás','tamás') 
        OR K.Name IN ('kiss','kiss tamás','tamás'))

这是我的代码,但“当前名称”只是示例。我不知道该怎么做:/

最佳答案

如果您要将这个“数组”存储在一个表中(每个搜索词一条记录),那么您只需这样做:

假设您将搜索词列表存储在表 SearchTermTerm 列中:

SELECT P.FullName, T.Term
FROM [Test].[dbo].Table1 AS P
INNER JOIN
SearchTerm T
ON
(
  P.FullName LIKE '%' + T.Term + '%'
  OR 
  P.Email LIKE '%' + T.Term + '%'
)
WHERE P.Deleted IS NULL

这会将 FullNameEmail 与表中的所有术语进行比较并返回匹配项

关于c# - 使用 LOOP 和数组的 SQL 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178424/

相关文章:

c# - 如何使用 C# 计算 RichTextBox 中的字符数

c# - 使用 Visual FoxPro 编程/建立数据库

c# - 如何获取请求查询字符串值?

mysql - 非法混合排序规则 - MySQL 假表

c# - 强类型数据集中的 DbNull 替换为 linq 中的字符串

c# - 我想在 C# 中将日期 "2018-05-18 17:16:24.570"转换为 "7/26/2018, 10:42 AM"格式

sql - 如何根据第一列结果查询表中的不同列

mysql - 如何从匹配两个相似列的表中选择不同的 ID?

c# - Skip/Take Missing 的 Lambda 过载

c# - 展平 Linq Group 查询