我在尝试将数据库中的字符串列映射到应用程序中的整数时遇到问题。先在代码中存储函数
我有一个车辆集合的数据库,当表创建时,年份列被指定为varchar。我需要这个值作为一个整数来执行它的计算。
我知道我可以使用int.Parse来转换它,但我需要它在实体框架查询中工作。 int.Parse在linq中不支持实体,所以这个方法已经结束了。
我尝试的下一件事是创建视图并将列转换为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到实体
不幸的是,这不会在我的情况下工作,因为int.Parse(和int.TryParse)不能被转换为一个sql函数在Linq to Entities中使用。 –