【发布时间】:2014-04-15 12:19:41
【问题描述】:
我有一个搜索部分,可以让用户根据在搜索框中输入的值查看订单。如果未输入搜索值(例如,日期、客户名称、销售价格等),则会显示 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 是 DECIMAL 字段。
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 是 DECIMAL 字段,我无法使用 Contains。因此我不得不使用 ToString()。但我收到以下错误。
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.
感谢任何帮助....
【问题讨论】:
-
使用
LIKE在十进制字段中搜索是什么意思。假设您的值中有129300和19300。这个价格有什么关系? -
@HamletHakobyan:即使我需要使用StartsWith或EndsWith,我仍然需要将十进制值转换为ToString()。
-
@Mr CoDeXeR:请恢复建议的编辑。我没有足够的权限拒绝您的编辑。这个问题具体是一个实体框架问题。保留查询只是为了提供更多详细信息.....
-
@SharminJose 元标签不应包含在标题中。您为您的问题明确标记了实体框架,这就是它们的用途。
标签: sql vb.net entity-framework .net-3.5 sql-like