0

興味深い問題です。linq でこれを行う方法がわかりません。問題の一部は、これを一度に実行しようとしていることにあるかもしれません。

相表があります

[id, name, [order]]
{{1, 'phase 2', 2}, {2, 'phase 1', 1}

特定のフェーズ ID のすべてのフェーズの進行状況のパーセンテージを取得したいと考えています。

私はSQLでこれを行う方法を知っています。

SELECT (SELECT a.row
        FROM   [phase] p 
               INNER JOIN (SELECT Row_number() 
                                    OVER( 
                                      ORDER BY [order]) row,
                                  id 
                           FROM   [phase]) p2 
                       ON p2.id = p.id 
        WHERE  p.id = @phaseid) / CONVERT(FLOAT, Count(*)) 
FROM   [phase] 

linqでこれを行う方法はありますか? 私の試みはすべて失敗したようです

4

2 に答える 2

1

次のことを試してください。

var query = phases.OrderBy(x => x.Order).Select(x => x.Id).ToList();
var result = query.Select((x, i) => new { x.Id, Index = i + 1 })
                  .Single(x => x.Id == phaseId).Index / (double)query.Count;

最初に、データベースからすべてのフェーズの ID を照会します。既に正しく順序付けされています。次に、メモリ内で行番号を生成し、要求された ID でフェーズを除外します。
インデックスとフェーズの合計数に基づいて、パーセンテージが計算されます。

于 2013-02-05T12:47:37.687 に答える
0

将来、この問題に取り組む人のために最初に働き始めました。vb.net

Dim query = (From p2 In db.Phases Order By p2.Order).AsEnumerable().Select(Function(p2, index) New test With {.id = p2.ID, .row = index + 1})
Dim Percentage = query.Where(Function(x) x.id = 3).Select(Function(x) x.row).First / db.Phases.Count
于 2013-02-05T13:26:48.650 に答える