У меня есть список продуктов:
IQueryable<Product> list = _ProductRepository.GetAll();
Столбец Product.Clicks соответствует количеству просмотров продукта.
Я хочу обновить этот список продуктов и обновить столбец Product.Rank, используя такой рейтинг:
SELECT
ProductId,
Name,
RANK() OVER (ORDER BY Clicks DESC) [Rank],
Clicks
FROM
Product
WHERE
Clicks > 0
Как наиболее эффективно использовать LINQ для этого? Есть ли способ сделать прямое обновление, а не запрашивать продукты и перечислять их? Это будет выполняться как пакетное задание на еженедельной основе.
UPDATE:
Похоже, что многие люди считают, что пакетное задание SQL SP будет лучшим способом продвижения вперед. Очки идут человеку, который предлагает такой запрос.
ОБНОВЛЕНИЕ: Ответьте следующим образом:
CREATE PROCEDURE UpdateRank
AS
BEGIN
SET NOCOUNT ON;
WITH RankValues AS
(SELECT [ProductId], [Clicks], [Rank],
RANK() OVER (ORDER BY [Clicks] DESC) AS [NewRank]
FROM [Product])
UPDATE [RankValues]
SET [Rank] = [NewRank]
WHERE Clicks > 0
END
GO