我有三张桌子。
在第一个表中,我有articleId
,articleName
...,在第二个表storeId
中,{{1} },storeName
,storeLocation
...在第三表maxNumOfArticles
,articleId
和storeId
。
我想在第一家商店中添加新文章。什么
我需要做的是将订单增加到商店中的所有商品,因此新商品会有订单1.
例如在商店A order
中,当我插入新文章时,将删除带有数字5的文章,带有订单4的文章,现在将带有订单5,带有订单3的文章将具有订单4 .. ......并且新文章将有第1个订单。
答案 0 :(得分:2)
这不是LINQ to SQL的意思。首先,您需要一个能够按商店自动为您的文章编号的视图:
CREATE VIEW ArticleStoreView AS
SELECT a.articleId ,
a.articleName ,
a.publicationDate,
asm.storeId ,
s.storeName ,
s.maxNumOfArticles,
ROW_NUMBER() OVER ( PARTITION BY asm.storeId ORDER BY publicationDate DESC ) AS [Order]
FROM dbo.Article a INNER JOIN dbo.ArticleStoreMap asm ON asm.articleId = a.articleId
INNER JOIN dbo.Store s ON s.storeId = asm.storeId
这将确保您的订单始终正确。
要获得相关文章,您可以编写此查询:
SELECT asv.articleId ,
asv.articleName ,
asv.publicationDate ,
asv.storeId ,
asv.storeName ,
asv.maxNumOfArticles ,
asv.[Order]
FROM dbo.ArticleStoreView asv
WHERE asv.[Order] <= asv.maxNumOfArticles
ORDER BY asv.publicationDate DESC
删除旧文章/商店地图:
DELETE dbo.ArticleStoreMap
FROM dbo.ArticleStoreMap asm
INNER JOIN dbo.ArticleStoreView asv ON asv.articleId = asm.articleId
AND asv.storeId = asm.storeId
WHERE asv.[Order] > asv.maxNumOfArticles
删除不再映射的旧文章
DELETE dbo.Article
FROM dbo.Article a WHERE NOT EXISTS (SELECT * FROM dbo.ArticleStoreMap asm WHERE asm.articleId = a.articleId)
答案 1 :(得分:-1)
如果您想阅读降序排序的前五名,请查看以下代码:
myList.OrderByDescending(x => x.InsertDate).Take(5);