c# - 将搜索添加到 linq 查询

标签 c# linq

我有一个基本的数据表,除了它包含一个 Username 列之外,它对于这个例子来说可以是完全通用的。

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

其次,假设我在多对多关系中有另一个我也想搜索的项目,在本例中为 Label

Data
{
   ID,
   Name,
   ...
}

Many
{ 
  DataID,
  OtherID
}

Other
{
   ID,
   Label
}

我最终想找到所有带有类似于某些搜索子句的标签的数据项。我是否再次使用 .Contains?

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

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

最佳答案

字符串相似度不是 SQL 能做好的事情。您最好的选择可能是找到所有具有相同前两个(或三个,如果需要)字符的匹配项,然后假设这是一个可管理的数字,使用 Levenshtein 距离或类似方法计算客户端的相似性分数(参见 http://en.wikipedia.org/wiki/Levenshtein_distance ).

或者,如果您感到勇敢,您可以尝试这样的事情! http://anastasiosyal.com/archive/2009/01/11/18.aspx

关于c# - 将搜索添加到 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895903/

相关文章:

c# - 我可以通过 LINQ 绑定(bind)更新 UI 吗?

c# - 异步模块或处理程序已完成,而异步操作仍未决

c# - 如何从 IQueryable 获取计数

c# - LINQ to Entities 无法识别方法 'System.Collections.Generic.Dictionary`

c# - 动态地在 Linq C# 中加入多表

c# - 单击后如何切换椭圆形背景色?

c# - 这个不安全的代码是否也可以在 .NET Core 3 中工作?

c# - 如何在 ObservableCollection<T> 上执行 foreach lambda 表达式?

c# - Regex Replace 以协助 LINQ 中的 Orderby

c# - 如何在 LINQ 中选择特定的列?