Преобразование SQL в LINQ в 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
и я хочу преобразовать его в LINQ в SQL, но мои навыки LINQ еще не там. Может кто-нибудь, пожалуйста, помогите мне преобразовать это. Это заявления with и union, которые делают это немного более сложным для меня.
любая помощь ценится.
2 ответов
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;}
}
Что это рекурсивный CTE. LINQ to SQL пока не поддерживает рекурсивные CTEs (и, вероятно, никогда не будет). Прости!
в качестве обходного пути вы можете оставить запрос в SQL и поместить его в хранимую процедуру. Затем вы можете вызвать эту хранимую процедуру из LINQ в SQL.