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