2016-05-04 10 views
0

私は3つのテーブルを持っています。すべてのレコードに順序を変更するlinq to SqlC#

テーブル最初で私はarticleIdarticleName ...、テーブルarticleIdstoreIdorderのテーブルstoreIdstoreNamestoreLocationmaxNumOfArticles...第インチ

たとえば、最初の店で新しい記事を追加します。私は何をする必要があるか

ストア内のすべての記事に順序をインクリメントするので、新しい記事は私が新しい記事を挿入店舗A maxNumOfArticles = 5に、例えば順1

を持つことになり、numが記事5は削除され、注文4の商品、今度は注文5、注文3の商品は注文4となり、新しい商品は注文1となります。

+0

注文を変更するには?トップ5を読むようにしてください。降順またはID –

+0

で降順と何を試しましたか?コードを表示できますか? –

+0

まず、デザイン上の問題のようです。新しいレコードが挿入されたときに、外部キーを持つレコードが削除されるのはなぜですか? 2番目:プライマリキーを増分で使用する番号ですか?数字は 'articleId'に保存されていますか? articleId descで注文されたレコードを取得することをお勧めします。 –

答えて

-1

トップ5降順で注文してください。

myList.OrderByDescending(x => x.InsertDate).Take(5); 
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) 
関連する問題