[英]Compare string number range in Entity Framework
长话短说,我需要得到基于一个范围(高/低值)项目,但是从数据库中列/属性是一个string
而我不能改变这种状况。 那么我该如何比较一个范围呢?
我似乎无法找到将实体属性转换为int
因此我可以进行比较。 当然Convert.toInt32
也不起作用。 我没有看到任何SqlFunctions
,但也许我忽视了一些简单的事情。
我一直在玩它,但到目前为止还没有运气。 这是我最近的尝试不起作用:
var result = Repo.Query().Where(e => e.SerialNumber.Cast<int>().First() >= myIntLowVariable && e.SerialNumber.Cast<int>().First() <= myIntHighVariable);
有什么建议么?
更新
用户输入两个SerialNumbers,我需要返回该范围内的所有记录,但SerialNumber
是一个string/varchar
列/属性。
数据 - 抱歉不知道怎么把表放在这里..
SN ::描述
1 ::牛奶
2个蛋
3 ::面包
4 ::奶酪
5 ::培根
6 ::酸奶
7 ::芥末
8 ::鸡肉
9 ::比萨饼
10 ::芯片
如果在查询中调用ToList(),那么您应该能够将字符串转换为Int32。
var result = Repo.Query().ToList().Where(e => e.StringNumberField.Cast<int>().First() >= myIntLowVariable && e.StringNumberField.Cast<int>().First() <= myIntHighVariable);
如果您无法投影整个查询,那么您可以执行以下操作:
在您执行过滤的db中创建存储过程。 这样的事情会做:
CREATE PROCEDURE spGetStuffBetween
(
@min int,
@max int
)
AS
BEGIN
SELECT * from dbo.Stuff where Convert(int, SerialNumber) < @max and Convert(int, SerialNumber) > @min;
END
使用EDM工具使用新添加的存储过程从数据库更新模型。 在“添加”下,选择刚刚创建的存储过程,然后选择“完成”。
更新模型后,您将无法看到存储过程,因此右键单击设计图面并选择“模型浏览器”。 您将能够在Stored Procedures节点下看到它。
双击模型浏览器中的存储过程。 在这里,您可以指定从存储过程返回的集合类型。
现在,您可以调用以下代码来获取所需的结果:
int myIntLowVariable = 1000;
int myIntHighVariable = 1000000;
var results= Repo.spGetAnimalsBetweenRange(myIntLowVariable , myIntHighVariable );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.