有序查询中行的百分比

时间:2013-02-05 12:32:45

标签: linq

好奇的问题,不知道如何在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中执行此操作?我所有的尝试似乎都失败了

2 个答案:

答案 0 :(得分: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过滤掉相位 根据指数和阶段总数,然后计算百分比。

答案 1 :(得分: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