按关键字搜索和排序结果

时间:2019-08-06 13:19:30

标签: c# linq entity

我正在尝试对Organisation的集合进行搜索(我正在使用LINQ to Entities)。

public class Organisation
{
    public string OrgName { get; set; }
    public string ContactName { get; set; }
    public string OverviewOfServices { get; set; }
    public string Address1 { get; set; }
    public string Town { get; set; }
    public string PostCode { get; set; }
    public string Keywords { get; set; }
}

用户输入了一些关键字,然后我想返回所有Organisation字段中存在 all 个关键字的所有Organisation

// 1.  Remove special characters and create an array of keywords
string[] Keywords = CleanKeyWordString(model.keyword)

// 2 . Get organisations
orglist = _UoW.OrganisationRepo.All();

({OrganisationRepo.All返回IQueryable中的Organisation。在此之前,搜索中还有其他查询)

// 3. Filter results by keywords
orglist = (from org in orglist
           where Keywords.All(s => 
               org.OrgName.ToLower().Contains(s) 
            || org.OverviewOfServices.ToLower().Contains(s) 
            || org.ContactName.Contains(s) 
            || org.Address1.ToLower().Contains(s) 
            || org.Town.ToLower().Contains(s) 
            || org.PostCode.ToLower().Contains(s) 
            || org.Keywords.ToLower().Contains(s))
           orderby searchTerms.Any(s => org.OrgName.ToLower().Contains(s)) ? 1 : 2 
           select org);

这将带回所需的结果,但是,我现在要对它们进行排序,以便首先对标题中带有关键字的记录进行排序,然后对其余的记录进行排序。

是否可以在结果中不添加某种排名算法?

1 个答案:

答案 0 :(得分:1)

var withRank = orglist
    .Select(o => 
        new { 
            Org = o, 
            Rank = o.OrgName.ToLower().Contains(s) 
        });
var orderedOrgList = withRank
    .OrderBy(o => o.Rank)
    .Select(o => o.Org);