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)
我是 运行 一个大型 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)