按关键字搜索和排序结果
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);
我正在尝试在 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);