Linq选择使用T-SQL函数

时间:2014-11-12 23:03:44

标签: linq sql-function

我有以下T-SQL工作:

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

我用100的TASKS传递临时表,并对所有TASKS运行函数func_GetTaskVisibility。

该函数然后检查几个要求,对于每个#allTask​​,它返回1表示好,0表示坏。

我收集了所有的return = 1并放入一个名为#visibleTasks的新临时表。

如何在LINQ中进行相同的调用?

非工作代码

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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设计器,您可以将您的函数放入dbml,就像您的表或存储过程一样,然后在linq中调用它,它将正确生成tsql < / p>

答案 2 :(得分:0)

你需要经历两个步骤,因为sql函数不能在某个地方的LINQ to SQL查询中使用。

因此你必须经历两个步骤,如::

 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)
}