Linq2db(MySQL)。设置行索引

时间:2018-06-14 12:58:56

标签: mysql linq2db

我需要为每一行指定行索引(带有Linq2db的Mysql 5.7)。

如何构建像

这样的查询
SELECT `t`.*,  @n:=@n+1 as rank FROM ('some query') `t`, (SELECT @n := 0) `rowcounter`

或者我怎么能用另一种方式呢

2 个答案:

答案 0 :(得分:2)

我们在这里

[Sql.Expression("@n:=@n+1", ServerSideOnly = true)]
static int IncrementIndex()
{
    throw new NotImplementedException();
}

[Test, MySqlDataContext]
public void RowIndexTest(string context)
{
    using (var db = GetDataContext(context))
    {
        db.NextQueryHints.Add(", (SELECT @n := 0) `rowcounter`");

        var q =
            from p in db.Person
            select new
            {
                rank = IncrementIndex(),
                id   = p.ID
            };

        var list = q.ToList();
    }
}

也不要忘记将Allow User Variables=True;添加到您的连接字符串中。

答案 1 :(得分:0)

从SQL查询中获取行索引没有特定的LINQ方法,但是在将SQL数据提取到客户端之后,您可以获得查询的索引。

var ans = someQuery.AsEnumerable().Select((t, rank) => new { t, rank });