asp.net 在linq中将int转换为字符串以进行搜索

exdqitrt  于 2023-05-02  发布在  .NET
关注(0)|答案(6)|浏览(175)

我希望我的用户能够通过部分字符串搜索采购订单(这是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转换为字符串,以便搜索它的片段?
谢谢

qlfbtfca

qlfbtfca1#

使用这个:

id = SqlFunctions.StringConvert((double)poid)

更多信息:http://msdn.microsoft.com/en-us/library/dd487127.aspx

nbysray5

nbysray52#

为便于将来参考,已使用以下命令修复此问题:

var pop = ctx
    .PurchaseOrders
    .OrderBy(x => x.PurchaseOrderID)
    .ToList()
    .Select(x => new SearchItem()
    {
        id = x.PurchaseOrderID.ToString(),
        label = x.SupplierID,
        category = "purchaseorder"
    });

是中间人名单让它起作用。

myss37ts

myss37ts3#

你得到这个错误是因为你的LINQ to SQL不能识别ToString()方法。
如果你想将int转换为string,并且你使用的是SQL Server和EF,那么可以这样使用函数SqlFunctions.StringConvert

let poid = SqlFunctions.StringConvert((double)po.PurchaseOrderID);

或者,作为替代:

where Convert.ToString(po.PurchaseOrderID).Contains(term)

问题是我们不知道您使用EF的提供程序是什么。在SQL Server的情况下,这将工作,但如果提供程序不同,如MySQL,使用该表达式,应用程序将抛出一个异常,并显示以下消息:
指定的方法系统。String StringConvert对类型“System.Data.Objects.无法将“SqlClient.SqlFunctions”转换为LINQ to Entities存储表达式。
小心点!
如果您没有使用SQL Server作为提供程序,请在查询中使用显式强制转换,如@SimonBelanger所建议的:

let poid = (string)po.PurchaseOrderID
z18hc3ub

z18hc3ub4#

我偶然发现了这个问题,并希望发布一个解决方案,将与实体框架和LINQ通过Lambda表达式的实体。

db.PurchaseOrders.AsEnumerable()
 .Where(x => x.PurchaseOrderID.ToString().Contains(term))
 .ToList();

这是从这里的解决方案中借用的--〉https://stackoverflow.com/a/21234785/2395030

pgx2nnw8

pgx2nnw85#

Linq不知道ToString()方法是什么,但是你可以定义你的自定义方法。如果你使用this link,你的问题就解决了。

qv7cva1a

qv7cva1a6#

试试这个

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();

相关问题