0

好奇的问题,不知道如何在 linq 中执行此操作。部分问题可能是我试图一次完成这一切。

我有一个相位表

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

我想在给定的 phaseid 的所有阶段中获得一定百分比的进度。

我知道用 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 回答