加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 最近匹配的Linq搜索结果

发布时间:2020-12-15 18:01:53 所属栏目:百科 来源:网络整理
导读:我有一个ObservableCollection,它包含一个Person对象.我的应用程序中有一个搜索功能,并希望在顶部显示最相关的结果.这样做最有效的方法是什么?我当前的搜索方法只是调用contains方法: var results = (from s in userList where s.Name.Contains(query) sel
我有一个ObservableCollection,它包含一个Person对象.我的应用程序中有一个搜索功能,并希望在顶部显示最相关的结果.这样做最有效的方法是什么?我当前的搜索方法只是调用contains方法:
var results = (from s in userList
               where s.Name.Contains(query)
               select s).ToList();

这样可以正常工作,但结果按照它们在userList中出现的顺序排序.如果我搜索皮特,那么它应该首先显示皮特,然后是彼得,然后彼得史密斯等.
它不必太复杂,因为它只会处理几千(最大)的结果.我天真的方法是首先执行s.Name ==查询,显示该项(如果有的话),然后执行s.Name.Contains(查询),删除匹配的项并将其附加到先前的匹配结果.然而,这似乎有点遍布,所以有更好的方法吗?谢谢
(ps – 在搜索时只使用名称,我不能使用SQL方法)

解决方法

您可以创建一个提供名称和查询字符串的例程,并返回一个整数值.

一旦你有了,只需通过以下方式返回:

int QueryOrder(string query,string name)
{
     if (name == query)
         return -1;
     if (name.Contains(query))
         return 0;

     return 1; 
}

然后做:

var results = userList.OrderBy(s => QueryOrder(query,s.Name));

这种方法的好处在于,稍后,您可以扩展例程以提供更多详细信息,从而可以根据您收到的匹配“好”进行排序.例如,“Pete” – > “彼得”可能是比“皮特”更好的比赛 – > “彼得史密斯”,所以你可以让你的逻辑为不同的选项返回不同的值……

如果您需要删除“非Pete”匹配,您也可以使用Where子句排除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读