Конвертировать SQL в LINQ to SQL - PullRequest
6 голосов
/ 27 декабря 2010

У меня есть 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

, и я хочу преобразовать его в LINQ to SQL, но мои навыки работы с LINQ пока отсутствуют.Может кто-нибудь, пожалуйста, помогите мне преобразовать это.Именно операторы with и union делают это более сложным для меня.

Любая помощь приветствуется.

Ответы [ 2 ]

8 голосов
/ 27 декабря 2010

Это рекурсивный CTE .LINQ to SQL еще не поддерживает рекурсивные CTE (и, вероятно, никогда не будет).Извините!

В качестве обходного пути вы можете оставить запрос как в SQL и поместить его в хранимую процедуру.Затем вы можете вызвать эту хранимую процедуру из LINQ to SQL.

4 голосов
/ 27 декабря 2010

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

с

class MyStub {
    public string name {get;set;}
    public int level {get;set;}
    public int categoryId {get;set;}
    public int parentId {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...