以前の 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;
私は正しい軌道に乗っていますか?