【发布时间】:2017-05-06 01:56:47
【问题描述】:
我在尝试将数据库中的字符串列映射到我的应用程序中的整数时遇到问题。
我有一个包含车辆集合的数据库,当创建表时,年份列被指定为 varchar。我需要将值作为整数才能使用它执行计算。
我知道我可以使用 int.Parse 来转换它,但我需要它在实体框架查询中工作。 int.Parse 在 linq to entity 中不受支持,因此该方法已失效。
接下来我尝试创建一个视图并将列转换为 int。这非常有效,直到我需要写入数据库,然后由于视图包含派生字段而引发错误。
接下来我尝试使用 Pawel Kadluczka 的“EntityFramework.CodeFirstStoreFunctions”库。这确实有效,但只有当我像这样直接指定它时:
Store.Vehicles.Where(x => CustomSqlFunctions.ParseInt(x.ModelYear) == 2000)
其中 ParseInt 在 c# 中定义为
[CodeFirstDbFunction("ParseInt")]
public static int ParseInt(string number) {
throw new NotSupportedException("Direct calls are not supported.");
}
sql 中的 ParseInt 函数只是调用cast( @p1 as int) 其中@p1 是传入的字符串。
我的问题是:
是否可以从 Vehicle 类的属性中调用 CustomSqlFunctions.ParseInt(ModelYear)?。
我试过这个:
public int? Year {
get { return CustomSqlFunctions.ParseInt(ModelYear); }
set { ModelYear = value.ToString(); }
}
但我收到错误,即 LINQ to Entities 不支持年份
【问题讨论】:
标签: c# entity-framework linq code-first