以前在 SQL 中,我会使用这样的东西来对我的搜索结果进行排名:
--search product name
SELECT tblProduct.ProductID, 20 AS Ranking
FROM tblProduct
INNER JOIN tblManufacturer ON tblProduct.ManufacturerID=tblManufacturer.ManufacturerID
LEFT OUTER JOIN tblProductCollection ON tblProduct.CollectionID=tblProductCollection.CollectionID
WHERE tblManufacturer.Name + ISNULL(' ' + tblProductCollection.CollectionName, '') + ' ' + tblProduct.Name LIKE '%' + @term + '%' AND tblProduct.Active = 1
UNION ALL
--search product exact name
SELECT tblProduct.ProductID, 200 AS Ranking
FROM tblProduct WHERE Name = '%' + term AND tblProduct.Active = 1
UNION ALL
此示例说明如果您的搜索词包含在名称中:20 是排名,如果您完全匹配名称:200 是排名。将表格联合在一起,按排名(降序)排序,嘿,快!
这次我正在尝试在 LINQ 中执行此操作,但不确定如何执行此操作,老实说,我不确定我之前的示例是否是最初执行此操作的最佳方法。
因此,我有一个映射到我的数据库的产品实体,并且我在我的部分类中添加了一个名为 SearchRanking 的属性:
var query = from p in db.Products
where p.Name.Contains(term)
select p;
var query2 = from p in db.Products
where p.Name.ToLower() == term
select p;
不知何故,我需要像这样设置属性:
var query = from p in db.Products
where p.Name.Contains(term)
select p, p.SearchRanking = 20;
var query2 = from p in db.Products
where p.Name.ToLower() == term
select p, p.SearchRanking = 200;
我在正确的轨道上吗?