C# 如何在C中编写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语法,而不是查询语法,因此,下面的查询应该可以做到这一点。请注意

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 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();