如何强制实体框架6中的内联参数?

时间:2016-12-30 13:12:02

标签: parameters entity-framework-6 inline

我正在使用Entity Framework 6,我的一个表有一个整数列,它实际上保存了C#Enum中的值(不以任何方式表示在DB中),我需要根据Enum成员名称对该列进行排序。

通过以下SQL可以完全实现这一点:

SELECT *
FROM [Foo] AS [t0]
ORDER BY 
    (CASE 
        WHEN [t0].[Bar] = 3 THEN 'A'
        WHEN [t0].[Bar] = 1 THEN 'B'
        WHEN [t0].[Bar] = 2 THEN 'C'
        ELSE 'D'
     END)
GO

以下LINQ代码完全符合我的需要(有警告),

Foo.OrderBy(x => 
        x.Bar == 3 ? "A" :
        x.Bar == 1 ? "B" :
        x.Bar == 2 ? "C" :
        "D") 

......需要注意的是,EF将内联值转换为参数,这使查询的速度降低了一个数量级。

-- Region Parameters
DECLARE @p0 Int = 3
DECLARE @p1 NVarChar(1000) = 'A'
DECLARE @p2 Int = 1
DECLARE @p3 NVarChar(1000) = 'B'
DECLARE @p4 Int = 2
DECLARE @p5 NVarChar(1000) = 'C'
DECLARE @p6 NVarChar(1000) = 'D'
-- EndRegion
SELECT *
FROM [Foo] AS [t0]
ORDER BY 
    (CASE 
        WHEN [t0].[Bar] = @p0 THEN @p1
        WHEN [t0].[Bar] = @p2 THEN @p3
        WHEN [t0].[Bar] = @p4 THEN @p5
        ELSE @p6
     END)

有人可以建议如何强制EF6内联值,而不是在特定情况下使用参数?

0 个答案:

没有答案