Я пытаюсь вернуть результаты из sql, используя запрос linq ниже, но порядок, в котором они возвращаются, не желателен. В приложении ниже приведен снимок экрана с данными моей таблицы, из которых должны быть возвращены результаты.
Результаты должны сначала возвращать точное совпадение текста с последующим наиболее близким совпадением.Если вводимый текст поиска - « Red & Bull », он должен возвратить « Red and bull » из таблицы вначале (& должен быть принят как «и»), а затем самый высокийколичество слов соответствует.Если вводимый текст поиска - « Это Tailer shop Inc », он должен вернуть результаты в следующем порядке: 1: TAILOR INC ,
.
Для этого я добавил исключение ключевых слов, таких как "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();
}
}
}