按关键字搜索和排序结果

Search and Order results by keywords

我正在尝试在 Organisation 中的 collection 上创建搜索(我正在使用 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; }
}

用户输入一些关键字,然后我想return所有Organisation其中所有关键字存在于任何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 returns an IQueryable of 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);

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

如果不在结果中添加某种排名算法,这可能吗?

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);