我有一个枚举,映射到DB上char(1)字段中的可能字段值.
public enum TestEnum: char
{
Value1 = 'a',
Value2 = 'b',
...
}
LINQ-to-SQL尝试将char字段映射为值,就像它们是枚举的名称一样.例如,对于“a”LINQ-to-SQL的值,尝试查找值TestEnum.a而不是TestEnum.Value1并导致异常.它仅支持整数字段的基于值的枚举映射.
可以创建一个处理转换的新属性,但由于生成的表达式不直接映射到基础字段,因此无法在查询中表现良好.
是否有另一种方法可以使LINQ-to-SQL使用枚举值来映射char(1)?
最佳答案 以下是我们现在正在做的事情:
我们在赋值期间使用System.Char作为底层类型和类型转换.例如:
entity.SomeField = (char)TestEnum.Value1;
我们在查询中使用Equals,例如:
where entity.SomeField.Equals(TestEnum.Value1);
.Equals进行转换.如果你在这里进行类型转换而不是SQL服务器添加一个不必要的NVarChar(1) – > Char(1)转换. .Equals语法不会这样做,并且出于某种原因表现正常.