我已经使用C#创建了一个 .net MVC 应用程序,用于列出组织机构,在数据库(SQLServer)中目前有6000条记录。组织表中的字段包括:
结果按标题排序,这并不合适。如果有人搜索“酒精支持”,我希望上述结果排在列表顶部。我希望按以下方式对结果进行排名:
**更新** 现在我正在寻找一个更简单的解决方案,请参考以下链接:使用Linq基于关键字对集合进行排序
- 标题(酒精支持小组)
- 联系人(詹姆斯·邦德)
- 内容(我们为酗酒者提供支持)
- 关键词(酒精、成瘾、酗酒者)
目前使用linq进行搜索,例如:
iList<Organisation> orglist = myOrgs.Where(x => x.Title.Contains('abc') ||
x.ContactPerson.Contains('abc') ||
x.Details.Contains('abc') ||
x.Keywords.Contains('abc'))
.OrderBy(x => x.Title).ToList();
结果按标题排序,这并不合适。如果有人搜索“酒精支持”,我希望上述结果排在列表顶部。我希望按以下方式对结果进行排名:
- 组织标题中的完整句子匹配。
- 组织标题中的所有搜索词。
- 组织标题中的任何搜索词。
- 组织关键字中的任何搜索词。
- 组织内容中的完整句子匹配。
**更新** 现在我正在寻找一个更简单的解决方案,请参考以下链接:使用Linq基于关键字对集合进行排序
myorgs.Where(x => x.Title.Contains(searchText)) .Concat(myorgs.Where(x => searchText.Split(' ').All(con => x.Title.Contains(con)))) .Concat(myorgs.Where(x => searchText.Split(' ').Any(con => x.Title.Contains(con)))) // more .Distinct();
- MaliorFreeText
,如此SQ问题所示。其他函数可以通过FromSql
来使用。 - Panagiotis Kanavos