C# 如何在C中编写LINQ查询行号?
SQL: 选择顶部百分比a、b、按a、b超额分配的行数,按a、b排序作为行数 从学生身上 a组,b组 林克: 我想将此SQL查询转换为LINQ,但不转换C# 如何在C中编写LINQ查询行号?,c#,linq,C#,Linq,SQL: 选择顶部百分比a、b、按a、b超额分配的行数,按a、b排序作为行数 从学生身上 a组,b组 林克: 我想将此SQL查询转换为LINQ,但不转换 var list = FileList.Select((file, index) => new { Index=index, Filename=file }); 例如,可能是这样。就像另一个答案所指出的那样,Select方法有一个带有索引参数的简便重载。但它需要方法LINQ语法,而不是查询语法,因此,下面的查询应该可以做到这一点。请注意
var list = FileList.Select((file, index) => new { Index=index, Filename=file });
例如,可能是这样。就像另一个答案所指出的那样,Select方法有一个带有索引参数的简便重载。但它需要方法LINQ语法,而不是查询语法,因此,下面的查询应该可以做到这一点。请注意,它结合了:查询和方法语法,因为我试图让它接近上面问题中的代码
var studentGroups=
from p in Students
group p by new { p.a, p.b };
var students =
from gr in studentGroups
from st in Students
.Where(s => s.a == gr.Key.a && s.b == gr.Key.b)
.Select((s,i) => new { s.a, s.b, s.c, s.d, rn = i + 1 })
orderby st.a, st.b
select st;
我将您的sql查询转换为lambda
var students = context.GroupBy(g => new { g.A, g.B }).Select((s, index) => new {
s.Key.A,
s.Key.B,
rowsnumber = index + 1
}).Take(10).ToList();
GROUPBY的工作方式与partition by类似。
索引从0开始,因此转换为行号需要添加1。
Take是选择前10行。好吧,一旦你在列表中有了它,你就有了索引。你为什么需要它?如果要对结果进行分区以进行分页,可以使用take/skip。也许你还有其他原因?@lgor这不一定和我如何让这个查询变得更好一样。绝对是一个原因。也就是说,你相信有一个行号Y可以解决一些你没有解释过的其他问题X,但是不解决X也可以解决Y。
var students = context.GroupBy(g => new { g.A, g.B }).Select((s, index) => new {
s.Key.A,
s.Key.B,
rowsnumber = index + 1
}).Take(10).ToList();