Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 类似于十进制字段_Sql_Vb.net_Entity Framework_.net 3.5_Sql Like - Fatal编程技术网

Sql 类似于十进制字段

Sql 类似于十进制字段,sql,vb.net,entity-framework,.net-3.5,sql-like,Sql,Vb.net,Entity Framework,.net 3.5,Sql Like,我有一个搜索部分,可以让用户根据搜索框中输入的值查看订单。如果未输入搜索值(例如日期、客户名称、销售价格等),将显示OrderDate DESC的前10条记录。下表列出了所需列 CREATE TABLE OrderDetails ( OrderId INT IDENTITY(1, 1) PRIMARY KEY, OrderPrice NUMERIC(18, 2), OrderDate DATETIME ) INSERT INTO dbo.OrderDetails S

我有一个搜索部分,可以让用户根据搜索框中输入的值查看订单。如果未输入搜索值(例如日期、客户名称、销售价格等),将显示OrderDate DESC的前10条记录。下表列出了所需列

CREATE TABLE OrderDetails
(
    OrderId INT IDENTITY(1, 1) PRIMARY KEY,
    OrderPrice NUMERIC(18, 2),
    OrderDate DATETIME  
)

INSERT INTO dbo.OrderDetails
SELECT 100.18 OrderPrice, GETDATE() OrderDate
UNION ALL
SELECT 300.62 OrderPrice, GETDATE() OrderDate
UNION ALL
SELECT 9300.12 OrderPrice, GETDATE() OrderDate
每当用户输入SalesPrice时,我都希望在EntityFramework的VB.Net中运行如下查询注意SalesPrice是十进制字段

SELECT * FROM dbo.OrderDetails WHERE OrderPrice LIKE '%9300%'
我正在使用System.Data.Entity.dll版本3.5.0.0。我开始写它如下:

Dim query = From o In e.OrderDetails Select o
If (Not String.IsNullOrEmpty(sPrice)) Then
   query = query.Where(Function(i) i.SalesPrice.ToString().Contains(sPrice))
End If
请注意,SalesPrice是一个十进制字段,我不能使用Contains。因此,我不得不使用ToString()。但是我得到了下面的错误

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

感谢您的帮助….

对于L2E不知道的字符串,您必须使用
SqlFunctions
静态方法来进行转换

我不确定我的VB语法是否正确,但这会起作用

query = query.Where(Function(i) SqlFunctions.StringConvert(CType(i.SalesPrice, System.Nullable(Of Decimal)).Contains(sPrice))
C#语法是:

query = query.Where(x => SqlFunctions.StringConvert((decimal?) x.SalesPrice).Contains(sPrice));

您可以在SQL中执行以下操作:

SELECT * FROM dbo.OrderDetails WHERE CAST(OrderPrice, VarChar(10)) LIKE '%9300%'
如果在WHERE子句中没有其他检查来阻止完整表扫描,那么在服务器端这将是非常低效的


我不会说LINQ,所以你自己在那里。

使用
类似的
在十进制字段中搜索有什么意义。假设你的值中有129300和19300。价格之间的关系如何?@Hamletshakobyan:即使我需要使用StartsWith或EndsWith,我仍然需要将十进制值转换为ToString()。@CoDeXeR先生:请还原建议的编辑。我没有足够的权限拒绝您的编辑。这个问题是一个实体框架问题。保留这些查询只是为了提供更多细节…@SharminJose元标记不应包含在标题中。你清楚地为你的问题标记了实体框架,这就是他们的目的。你确定它能在EF 3.5上工作吗?我在其他一些例子中看到过它,但找不到任何地方告诉我它可以在3.5中使用。
SqlFunctions
在.NET3.5中不可用,从4.0开始,我只是编辑了这个问题(在标题中也添加了它),以突出显示我使用的版本。我在问题中已经提到,但没有强调。感谢您的帮助…问题是如何在EF 3.5的十进制字段上应用LIKE运算符。事实上,我已经在问题文本中添加了这些信息。但是有人把它改成了十进制字段,没问题。我只是回答了第二组代码,并指出可以使用这样的构造对数字进行字符串运算。