我正在尝试使用下面的linq查询从sql返回结果,但是不需要返回结果的顺序。 随附是以下表格数据的屏幕截图,必须从中返回结果。
结果必须首先返回完全匹配的文本,然后再返回最接近的匹配。 如果输入的搜索文本为“ Red&Bull ”,则应首先从表中返回“ Red and Bull ”(&必须假定为“ and”),然后是匹配的单词数最高。 如果输入的搜索文本为“ 这是Tailer shop Inc ”,则必须按以下顺序返回结果: 1:TAILOR INC , {{3} } 。
为此,我添加了排除关键字,例如“ the”,“ is”等,但这似乎不起作用。请协助。
public List<SearchListItem> GetSearchResults(string name)
{
List<string> My_Filter_List = new List<string>();
List<string> removeWords = new List<string> { "this","is", "the", "a", "and", "or", "an", "inc", "&" };
name = name.ToLower();
My_Filter_List = name.Split(' ').ToList();
List<MY_LIST> query = new List<MY_LIST>();
List<string> lstSearchNewName = My_Filter_List.Except(removeWords).ToList();
string filteredName = String.Join(" ", lstSearchNewName);
List<MY_LIST> queryEntireName = new List<MY_LIST>();
List<MY_LIST> queryFilteredName = new List<MY_LIST>();
queryEntireName = (from c in context.MY_LIST
where (c.PRODUCT_NAME == name || c.PRODUCT_NAME == name.Trim() || c.PRODUCT_NAME == name.Replace("&", "and"))
select c).ToList();
if (queryEntireName.Count == 0)
{
if (filteredName.Trim() == "*")
{
query = (from c in context.MY_LIST
orderby c.PRODUCT_NAME
select c).Take(500).ToList();
}
else
{
query = (from c in context.MY_LIST
where c.PRODUCT_NAME.Contains(filteredName)
orderby c.PRODUCT_NAME
select c).Take(500).ToList();
}
}
}