2011-02-03 6 views
1

により、カスタムオーダーで選択クエリ、名前も製品:LINQ to SQLは:私たちは、次の表ている


    UserName ProductName SortOrder 
    -------------------------------------- 
    U1   U1P1   2 
    U1   U1P2   3 
    U1   U1P3   5 
    U2   U2P1   1 
    U2   U2P2   2 
    U3   U3P1   4   

ユーザー名と商品名は、何もすることができます。各UserNameのSortOrderはインクリメンタルですが、任意のインデックスから開始でき、それらの間にギャップが存在する可能性があります。
私はこのようにデータをソートするクエリが必要です。各ユーザの


    UserName ProductName SortOrder 
    -------------------------------------- 
    U1   U1P1   2 
    U2   U2P1   1 
    U3   U3P1   4 
    U1   U1P2   3 
    U2   U2P2   2 
    U1   U1P3   5   

最初の行は、次に、第2行ように添加されます。
Linq to Sqlでこれが可能かどうかはわかりません。
テーブルに10000行以上あることもありますので、パフォーマンスが重要です。

答えて

2

純粋なlinq(クエリ構文)ですか?私が知っていることではありません。

Linq-to-SQL?確かに - TSQLサポートのおかげで:

var query = ctx.ExecuteQuery<Product>(@" 
    select x.UserName, x.ProductName, x.SortOrder 
    from (
     select p.UserName, p.ProductName, p.SortOrder, 
      ROW_NUMBER() over (partition by p.UserName order by p.SortOrder) 
         as [Rank] 
     from Products p) x 
    order by x.[Rank], x.UserName, x.SortOrder"); 

テーブルのインデックス戦略はここで重要かもしれません。 UserNameSortOrder(stats-IOを測定)を削除し、それを削除してインデックスSortOrderUserNameを試してみるとよいでしょう(もう一度、stats-IOを測定してください)。

+0

@マーク:ありがとう、これは本当に素晴らしく、完璧に動作します。誰かがクエリ構文でそれを行うことができるかどうかを見てみましょう。 – Atashbahar

関連する問題