LINQ queries and SQL expressions

76 views
Skip to first unread message

alexander...@gmail.com

unread,
Dec 13, 2012, 10:00:57 AM12/13/12
to blto...@googlegroups.com
I've implemented an SQL expression:

[SqlExpression("row_number() over (order by {0} desc)", 0, ServerSideOnly = true)]
public static int RowNumberDesc<T>(T obj) { ... }




Аnd now I'm trying to use it in LINQ queries:

var query1 = db.GetTable<Role>()
    .Select(s => new { Id = s.Id, Number = SqlFunctions.RowNumberDesc(s.Id) });

var query2 = from u in db.GetTable<User>()
             join r in query1 on u.RoleId equals r.Id
             select new { u.Id, r.Number };



For the first query the SQL code looks fine:

SELECT
    [s].[RoleId] as [Id],
    row_number() over (order by [s].[RoleId] desc) as [c1]
FROM [Role] [s]




Concerning "query2", I'd like the code like below:

SELECT
    [u].[UserId] as [Id],
    [s].[c1] as [c1]
FROM [User] [u]
INNER JOIN (
    SELECT
        [r].[RoleId] as [Id],
        row_number() over (order by [r].[RoleId] desc) as [c1]
    FROM [Role] [r]
) s ON [u].[RoleId] = [s].[Id]


But I get the following result:

SELECT
    [u].[UserId] as [Id],
    row_number() over (order by [s].[RoleId] desc) as [c1]
FROM [User] [u]
INNER JOIN [Role] [s] ON [u].[RoleId] = [s].[RoleId]

How can I force my "row_number" function to stay in JOIN clause?

Reply all
Reply to author
Forward
0 new messages