2015-02-12 99 views
0

我有搜索功能,将搜索条件传递给我的查询,我通过这些搜索条件筛选我的查询,但我很不确定如何通过匹配的单词排序这些结果。OrderBy从搜索功能匹配的词

string[] seperator = { " " }; 
string[] filteredSearchTerms = searchTerm.Split(seperator, StringSplitOptions.None); 

List<Ticket> tickets = (from t in entities.tbl_Ticket 
           where 
           t.tbl_Campaign.CampaignName == user.campaignName & 
           filteredSearchTerms.Any(v => t.Description.Contains(v)) 
           select new Ticket 
           { 
            dateAdded = (DateTime)t.DateAdded, 
            description = t.Description, 
            name = t.Name, 
            ticketID = t.TicketID, 
            statusID = (int)t.StatusID, 
            SearchTerms = filteredSearchTerms.ToList() 
           }).AsEnumerable() 
           .Where(obj => filteredSearchTerms.Any(v => System.Text.RegularExpressions.Regex.IsMatch(obj.description, string.Format(@"\b{0}\b", v)))) 
           .Take(10).ToList(); 

因此,如果第一个结果了所有在其描述中应该出现在列表的顶部的话呢。我不确定在我目前的情况下是否有可能。我曾尝试过使用与过滤器类似的Where扩展名的OrderByDescending。

任何帮助将不胜感激!

问候,

TEZ

回答

0

您可以使用OrderByDescending()。下面的场景的一个例子。

string[] searchTerms = new[] { "one", "two", "three" };    
var descriptions = new List<string>(new string[] { "one string", "two string", "one two three string", "one two string", "no match" }); 
var filteredDescriptions = descriptions.Where(description => searchTerms.Count(searchTerm => description.Contains(searchTerm)) > 0); 
var orderedDescriptions = filteredDescriptions.OrderByDescending(description => searchTerms.Count(searchTerm => description.Contains(searchTerm))); 

我收到以下结果。

一二三串 一个两串 一个字符串 两串

希望这有助于。