将SQL转换为LINQ to SQL

Ada*_*ley 6 .net c# sql linq linq-to-sql

我有SQL查询

with c as (
  select  categoryId,parentId, name,0 as [level]
  from task_Category b 
  where b.parentId is null
    union all
  select b.categoryId,b.parentId,b.name,[level] + 1
  from task_Category b join c on b.parentId = 
    c.categoryId)
select name,[level],categoryId,parentId 
  as item 
from c
Run Code Online (Sandbox Code Playgroud)

我想将它转换为LINQ to SQL,但我的LINQ技能还没有.有人可以帮我转换一下.with和union语句使我对此更加复杂.

任何帮助赞赏.

Mar*_*ers 8

那是一个递归的CTE.LINQ to SQL还不支持递归CTE(并且可能永远不会).抱歉!

作为一种解决方法,您可以将查询保留在SQL中,并将其放在存储过程中.然后,您可以将该存储过程从LINQ调用到SQL.


Mar*_*ell 4

LINQ-to-SQL仅支持基本查询;CTE 和递归不包含在其中。因此,这是我对 LINQ-to-SQL 的高科技翻译:

var data = ctx.ExecuteQuery<MyStub>(@"
with c as (
  select  categoryId,parentId, name,0 as [level]
  from task_Category b 
  where b.parentId is null
    union all
  select b.categoryId,b.parentId,b.name,[level] + 1
  from task_Category b join c on b.parentId = 
    c.categoryId)
select name,[level],categoryId,parentId 
  as item 
from c").ToList();
Run Code Online (Sandbox Code Playgroud)

class MyStub {
    public string name {get;set;}
    public int level {get;set;}
    public int categoryId {get;set;}
    public int parentId {get;set;}
}
Run Code Online (Sandbox Code Playgroud)