1

这是我在过滤代码中所做的事情。我如何在 SPROC 中获得相同的东西?

var projects = _context.Projects.AsQueryable();
if (parameterList.OfficeIds)
{
   projects = projects.Where(x => parameterList.OfficeIds.Contains( x.OfficeId));
}
var list = projects.ToListAsync();

我知道如何发送逗号分隔的值作为参数。我的重点是如何在 SPROC 中应用条件WHERE子句。

当有要查找的 ID 时,我可以发送类似SqlParameter("@value1", value1), SqlParameter("@value2", value2)

SELECT * FROM Projects WHERE OfficeId IN ({0})

现在没有参数要发送怎么办,我该如何处理WHERE子句?

感谢您的帮助

4

1 回答 1

2

我在工作中经常使用它。

DECLARE @UserId int

SELECT *
FROM Users u
WHERE UserId = ISNULL(@UserId, u.UserId)

或者

DECLARE @CSV VARCHAR(8000) 

SELECT * 
FROM Projects p 
WHERE P.OfficeId IN (select * from dbo.fn_Splitter(@CSV)) OR @CSV IS NULL

因此,如果您为参数传递一个值,它将使用参数的值并过滤您的行。如果您没有为参数传递值,或者它为空,它将忽略 WHERE 子句并返回表中的所有记录。

于 2018-12-22T23:36:27.467 回答