将搜索添加到linq查询

时间:2010-10-09 06:10:38

标签: c# linq

我有一个基本的数据表,它可以完全通用于此示例,但它包含Username列。

我想要一个简单的文本框和一个在Username字段上执行相似性搜索的按钮。我知道我可以使用.Contains()方法,它会在sql中转换为LIKE,但这是正确的做法吗?

其次,假设我还想要搜索多对多关系中的另一个项目,在这种情况下Label

Data
{
   ID,
   Name,
   ...
}

Many
{ 
  DataID,
  OtherID
}

Other
{
   ID,
   Label
}

我最终希望找到所有带有类似于某个搜索子句的标签的数据项。我再次使用.Contains吗?

然后我想在同一个查询中排序以获得Username和Label的最佳匹配;如何对{Username和Label}的组合相似性进行排序?

编辑:LIKE查询的结果如何排序?它只是基于索引,它匹配的二进制文件与它不匹配?我想我并不关心每个人的相似度得分,我或多或少只是想知道这种机制。似乎很容易返回LIKE查询,但我一直认为LIKE是一个糟糕的选择,因为它不使用数据库中的索引。这是真的,如果是这样重要吗?

1 个答案:

答案 0 :(得分:1)

字符串相似性不是SQL可以做得好的。你最好的选择可能是找到前两个(或三个必要的)字符的所有匹配,然后,假设这是一个可管理的数字,使用Levenshtein距离或类似的方法计算客户端的相似性得分(见{{3 }})。

或者,如果你感到勇敢,你可以尝试这样的事情! http://en.wikipedia.org/wiki/Levenshtein_distance