首页 > 解决方案 > Linq2db (MySQL)。设置行索引

问题描述

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

我怎样才能建立一个像

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

或者我该如何以另一种方式做到这一点

标签: mysqllinq2db

解决方案


开始了

[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;到您的连接字符串。


推荐阅读