提问人:Gordon Copestake 提问时间:1/21/2014 更新时间:4/27/2023 访问量:33231
在 LINQ 中将 INT 转换为字符串以进行搜索
convert int to string in linq for searching
问:
我希望我的用户能够通过部分字符串搜索采购订单(即 INT),即如果采购订单123456输入 456 可以让我123456结果。
我以为这会起作用:
var pop = (from po in ctx.PurchaseOrders
let poid = po.PurchaseOrderID.ToString()
where poid.Contains(term)
select new SearchItem
{
id = poid,
label = po.SupplierID,
category = "purchaseorder"
}).ToList();
但是我收到一个错误
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.
如何将 INT PurchaseOrderID 转换为字符串,以便能够搜索其中的片段?
谢谢
答:
Linq 不知道 ToString() 方法是什么,但您可以定义自定义方法。如果您使用此链接,您的问题就会得到解决。
使用这个:
id = SqlFunctions.StringConvert((double)poid)
更多信息:http://msdn.microsoft.com/en-us/library/dd487127.aspx
评论
试试这个
var pop = (from po in ctx.PurchaseOrders
let poid = SqlFunctions.StringConvert((double)po.PurchaseOrderID)
where poid.Contains(term)
select new SearchItem
{
id = poid,
label = po.SupplierID,
category = "purchaseorder"
}).ToList();
评论
您收到该错误是因为 LINQ to SQL 无法识别该方法。ToString()
如果要将 an 转换为 a,并且将 SQL Server 与 EF 配合使用,请按以下方式使用函数 SqlFunctions.StringConvert:int
string
let poid = SqlFunctions.StringConvert((double)po.PurchaseOrderID);
或者这个,作为替代方案:
where Convert.ToString(po.PurchaseOrderID).Contains(term)
问题是我们不知道你与 EF 一起使用的提供程序是什么。对于 SQL Server,这将起作用,但如果提供程序不同,如 MySQL,使用该表达式,则应用程序将引发异常并显示以下消息:
类型上的指定方法 System.String StringConvert “System.Data.Objects.SqlClient.SqlFunctions”无法转换为 LINQ to Entities 存储表达式。
小心!
如果未使用 SQL Server 作为提供程序,请在查询中使用显式强制转换,如@SimonBelanger建议:
let poid = (string)po.PurchaseOrderID
评论
为了将来参考,请使用以下方法修复此问题:
var pop = ctx
.PurchaseOrders
.OrderBy(x => x.PurchaseOrderID)
.ToList()
.Select(x => new SearchItem()
{
id = x.PurchaseOrderID.ToString(),
label = x.SupplierID,
category = "purchaseorder"
});
正是中间列表使它起作用。
评论
我偶然发现了这个问题,并想发布一个解决方案,该解决方案将通过 Lambda 表达式与实体框架和 LINQ to 实体一起使用。
db.PurchaseOrders.AsEnumerable()
.Where(x => x.PurchaseOrderID.ToString().Contains(term))
.ToList();
这是从这里的解决方案中借来的——>https://stackoverflow.com/a/21234785/2395030
评论
let poid = (string)po.PurchaseOrderID
ToString
CAST(X as Type)