我正在为我的MVC3应用程序实现搜索功能。我希望将两个参数传递给并执行一个基本上类似于这样的存储过程:
create procedure MyProc
(
@FirstParam nvarchar(50),
@SecondParam nvarchar(20)
)
as select * from MyTable where @FirstParam like @SecondParam
对于执行此任务的最无痛方式和/或最佳实践的任何见解将不胜感激。
答案 0 :(得分:1)
您的建议可以确实可以通过参数完成,而您应该使用像EF4这样的ORM进行数据访问。像大多数支持存储过程的ORM一样,可以确实将多个参数传递给存储过程。
但是,您将发现的问题是,您无法在SQL Server(或我知道的任何其他SQL数据库)中拥有动态列名称 - 您无法在变量中提供列名。 / p>
您需要使用dynamic SQL来实现此目的,无论是在存储过程中还是其他方式。
答案 1 :(得分:1)
我的消化是使用dynamic linq(以及here和here)。您可以将有效的linq表达式作为常规字符串传递:
var column = "Name";
var value = "Marvin";
var query = DbCtx.MyEntity.Where("{0} == @1", columnName, value);
好处(IMO)是您可以将搜索逻辑保留在应用程序中,如果需要对许多表执行此操作,则可以创建T4模板以为您生成引导代码。