من برا سرچ ها چند کلمه ای برا اینکه نتیجه خیلی خوبی بگیرم از این روش استفاده میکنم ولی سرعت لود دیتام خیلی پایینه میشه راه حلی بهم پیشنهاد بدید .
هدفم اینه که دقیقا بدونم کلمات سرچ شده چند بار تکرار شدن تا با اولویت بالا نشون بدم و کاربر به نتایج درستی دسترسی پیدا کنه .
public List<Product> AutoCompleteProductList(string term = "")
{
string[] words = term.Split(' ');
List<SearchResult> v = new List<SearchResult>();
List<int> temp = new List<int>();
if (!String.IsNullOrEmpty(term))
{
foreach (var text in words)
{
temp.Clear();
temp = db.Products.Where(p => p.Product_Name.Contains(text)
|| p.Product_English_Name.Contains(text)
|| p.Product_ID.ToString() == text
|| p.Product_Short_Info.Contains(text)
|| p.Product_Tag.Contains(text)).Where(a => a.Product_Status).OrderByDescending(a => a.Product_ID).Select(r => r.Product_ID).ToList();
foreach (var item in temp)
{
SearchResult SearchResultTemp = v.FirstOrDefault(e => e.Product_ID == item);
if (SearchResultTemp != null)
{
SearchResultTemp.Count += 1;
v.RemoveAt(v.IndexOf(SearchResultTemp));
v.Add(SearchResultTemp);
}
else
{
v.Add(new SearchResult
{
Product_ID = item,
Count = 1
});
}
}
}
}
List<int> end = v.OrderByDescending(e => e.Count).Select(e => e.Product_ID).ToList();
List<Product> routeList = new List<Product>();
foreach (var item in end)
{
Product p = db.Products.Find(item);
routeList.Add(p);
}
return routeList;
}
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)