EF 核心获取字符串作为枚举类型

EF core fetch string as enum type

我是 运行 一个大型 SELECT,在 MYSQL 数据库上有 100.000 行的数量级。 我正在获取的 table 有一个名为 type 的列,它有 4 个不同的字符串值。

|Id|Type  |MetaKey|MetaValue|
|===========================|
|01|'line'|'AKey' |AValue   |
|02|'line'|'AKey1'|AValue   |
|03|'Ship'|'AKey2'|AValue   |
|04|'Fee' |'AKey3'|AValue   |
|05|'Ship'|'AKey4'|AValue   |

目前主要的瓶颈似乎是网络传输,所以我想最好地将这 4 个不同的字符串值转换为一个 int 枚举(或一些小的),这样我就可以节省传输内存。

我猜 MYSQL CASE 会允许在 SQL 中执行此操作。

EF core 可以吗? LINQ 语法是什么样的?

重申一下 - 我希望在数据库中完成转换,而不是在 C# 客户端中完成。

编辑:抱歉 - 我很困惑,这是一个 MYSQL 数据库而不是 MSSQL 数据库。

您的查询应如下所示:

public enum MyEnum
{
    Unknown = 0,
    Line = 1,
    Ship = 2,
    Fee = 3
}
var query = 
    from t in ctx.Table
    select new 
    {
        c.Id,
        c.MetaKey,
        c.MetaValue,
        Type = (MyEnum)(
            c.Type == "line" ? 1 :
            c.Type == "Ship" ? 2 :
            c.Type == "Fee" ? 3 : 0)
    };

EF Core 生成返回整数的最佳表达式:

CAST(CASE
    WHEN [e].[Type] = N'line' THEN 1
    WHEN [e].[Type] = N'Ship' THEN 2
    WHEN [e].[Type] = N'Fee' THEN 3
    ELSE 0
END AS int)