2014-11-12 1 views
0

У меня есть следующий T-SQL работы:Linq Выберите Into с помощью T-SQL функции

SELECT * INTO #visibleTasks FROM [#allTasks] 
WHERE [dbo].[func_GetTaskVisibility](taskId, state) = 1 

Я прохожу в временную таблицу с 100 задач и запуска функции func_GetTaskVisibility против всех ЗАДАЧ.

Функция затем проверяет несколько требований и для EACH #allTask ​​возвращает 1 для хорошего и 0 для плохого.

Я собрал все return = 1 и поместил в новую таблицу temp, называемую #visibleTasks.

Как я могу сделать тот же вызов в LINQ?

неработающий КОД

var visible = (from f in allTasks 
    select new { 
    // to lookup foreach and return clean 
    visibleTasks = func_GetTaskVisibility(taskId,state) = 1 
    } 
    ).ToList(); 

ответ

1

Ну, SELECT INTO используется для вставки данных, которые Linq не предназначены для, но запроса часть будет:

var visible = (from f in allTasks 
    // to lookup foreach and return clean 
    where func_GetTaskVisibility(taskId,state) = 1 
    select f 
    ).ToList(); 
0
var visible = (from f in allTasks 
    // to lookup foreach and return clean 
    where MyDbContext.func_GetTaskVisibility(f.taskId,f.state) == 1 
    select f 
    ).ToList(); 

Если вы используете конструктор Linq2SQL, вы c поместите свою функцию в dbml так же, как и ваши таблицы или хранимую процедуру, а затем вызовите ее в linq, и он будет правильно генерировать tsql.

0

Для этого вам нужно пройти 2 шага из-за проблемы, sql-функции не могут использоваться в запросах LINQ to SQL где-то.

из-за этого вы должны пройти 2 этапа, как ::

var Tasks = (from f in allTasks 
        select new { 
        ID=TaskID, 
        State=TaskState, 
        VisibleTask=0; 
        } 
        ).ToList(); 

for(int i=0;i<tasks.length;i++) 
{ 
    Tasks[i].VisibleTask= dataContext.func_GetTaskVisibility(Tasks[i].ID,Tasks[i].State) 
} 
Смежные вопросы