案例陈述的参数替代

时间:2019-12-24 17:33:02

标签: sql sql-server entity-framework-6

我有以下简化的查询(当前是从存储过程返回的),我希望将其用作Entity Framework中的工作视图的基础:

Select 
cast (case when warehouse = @Warehouse then 1 else 0 end as bit) as AtThisWarehouse,    
s.id as productStatusId 
from products p 
left join productstatus s on p.availiblity = s.cd;

显然,我不想在视图中使用参数,也不想使用存储过程或用户定义的函数,因为我想遵循Entity Framework中的当前模式。

仓库将是已知的,并且可以通过过滤器传递给where子句,但是我不确定如何利用这一事实来获取我想要的结果。有什么建议可以解决吗?

1 个答案:

答案 0 :(得分:1)

因此,不要将case语句与参数一起使用,而应将其用作过滤器。因此,您的视图将类似于(最佳做法是始终在您的对象上包含架构,我认为是dbo):

视图

select warehouse
     , productStatusId
     , productId
from dbo.products p
left join dbo.productstatus s on p.availability = s.cd;

查询以使用视图

select productId
 , productStatusId
from schema.viewname
where warehouse = @warehouse;

获取所有仓库状态的另一种方法

select cast(case when warehouse = @warehouse then 1 else 0 end as bit) as AtThisWarehouse, 
productStatusId
from schema.viewname;