Linq 有序查询中的行百分比

Linq 有序查询中的行百分比,linq,Linq,奇怪的问题,不知道如何在linq中做到这一点。问题的一部分可能是我试图一次完成这一切 我有一张相位表 [id, name, [order]] {{1, 'phase 2', 2}, {2, 'phase 1', 1} 我想得到一个给定阶段所有阶段的进度百分比 我知道一种使用sql实现这一点的方法 SELECT (SELECT a.row FROM [phase] p INNER JOIN (SELECT Row_number()

奇怪的问题,不知道如何在linq中做到这一点。问题的一部分可能是我试图一次完成这一切

我有一张相位表

[id, name, [order]]
{{1, 'phase 2', 2}, {2, 'phase 1', 1}
我想得到一个给定阶段所有阶段的进度百分比

我知道一种使用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有没有办法做到这一点?我的所有尝试似乎都失败了

请尝试以下操作:

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过滤掉阶段。

根据指数和阶段总数,然后计算百分比。

我在未来为任何解决此问题的人所做的第一件事。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

你能解释一下你想要实现什么吗?对不起,哈姆雷特,我想我已经给出了一个很好的解释。举例来说。。如果有10个阶段。。我给一个phaseid,它的顺序是5,我希望它返回0.50,这两个值我都得到以下错误。“LINQ to实体无法识别方法'System.LINQ.IQueryable1[System.Double]选择[Phase,Double](System.LINQ.IQueryable1[PHRestService.Phase],System.LINQ.Expressions.Expression
1[System.Func
3[PHRestService.Phase,System.Int32,System.Double])“方法,而此方法无法转换为存储表达式。”这是因为我正在使用LINQ转换实体吗?@PaulHutchinson:真遗憾。看起来EF不支持那个特定的方法:(@Dantheman我在你使用你的方法之前刚到那里。谢谢你的帮助!@PaulHutchinson:干得好!:-)