Sql 类似于十进制字段
我有一个搜索部分,可以让用户根据搜索框中输入的值查看订单。如果未输入搜索值(例如日期、客户名称、销售价格等),将显示OrderDate DESC的前10条记录。下表列出了所需列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
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运算符。事实上,我已经在问题文本中添加了这些信息。但是有人把它改成了十进制字段,没问题。我只是回答了第二组代码,并指出可以使用这样的构造对数字进行字符串运算。