使用LINQ提前搜索结果

时间:2018-12-07 05:43:22

标签: asp.net asp.net-mvc entity-framework linq

我正在尝试使用下面的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();
                        }

}

}

0 个答案:

没有答案