将顺序更改为所有记录linq to Sql c#

时间:2016-05-04 07:58:43

标签: c# linq linq-to-sql

我有三张桌子。

第一个表中,我有articleIdarticleName ...,在第二个storeId中,{{1} },storeNamestoreLocation ...在第三maxNumOfArticlesarticleIdstoreId

我想在第一家商店中添加新文章。什么

我需要做的是将订单增加到商店中的所有商品,因此新商品会有订单1.

例如在商店A order中,当我插入新文章时,将删除带有数字5的文章,带有订单4的文章,现在将带有订单5,带有订单3的文章将具有订单4 .. ......并且新文章将有第1个订单。

2 个答案:

答案 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);