public IEnumerable <int> getSimularAnnouncements(Announcement announcement) { //Select all items from db except selected announcement Announcements = _db.Announcements.Where(i => i.Id != announcement.Id).ToList(); //ititialize dictionary with key = announcement.Id, keyValue = similar words count Dictionary <int, int> IdOfSimilarAnnouncements = new Dictionary <int, int>(Announcements.Count()); //words of selected announcement var ourAnnouncementWords = announcement.Tittle.ToLower().Split(' ') .Union(announcement.Description.ToLower().Split(' ')); foreach (var item in Announcements) { int sameWordsCount = 0; var otherAnnouncementWord = item.Tittle.ToString().ToLower().Split(' ') .Union(item.Description.ToLower().Split(' ')); var sameWords = ourAnnouncementWords.Intersect(otherAnnouncementWord); sameWordsCount = sameWords.Count(); if (sameWordsCount == 0) { continue; } else { IdOfSimilarAnnouncements.Add(item.Id, sameWordsCount); } } //get id of 3 most similar announcement IEnumerable <int> ListOfThreeSimilarAnnouncements = IdOfSimilarAnnouncements.OrderByDescending(t => t.Value).Take(3).Select(t => t.Key); return(ListOfThreeSimilarAnnouncements); }