可以';t在LINQ to Entities查询中使用ToString()

本文关键字:查询 ToString Entities to LINQ 可以 | 更新日期: 2023-09-27 18:25:19

所以我有以下代码:

string searchQuery = collection["query"];    
var srmas = (
    from SRMAs in db.SRMAs
    join SRMAStatus in db.SRMAStatus on SRMAs.Id equals SRMAStatus.Id
    join PurchaseOrders in db.PurchaseOrders on SRMAs.PONumber equals PurchaseOrders.PONumber
    join Suppliers in db.Suppliers on PurchaseOrders.SupplierID equals Suppliers.SupplierID
    join SRMADetails in db.SRMADetails on SRMAs.Id equals SRMADetails.SRMAId
    where ids.Contains(SRMAs.Status) 
    && 
    (
        searchQuery.Contains(PurchaseOrders.suppliersOrderNumber)
        ||
        searchQuery.Contains(SRMAs.PONumber.ToString())
    )
    select new
    {
        SRMAs.Id,
        SRMAs.PONumber,
        SRMAs.CreatedOn,
        Suppliers.SupplierName,
        SRMAStatus.StatusName,
        PurchaseOrders.PODate, PurchaseOrders.suppliersOrderNumber
    }
).ToList();

其中searchQuery是字符串变量。

实际上,我必须使用PONumberIN子句,为此,我使用的是Contains,它给出了标题中提到的错误。如何检查非字符串值?

可以';t在LINQ to Entities查询中使用ToString()

您可以尝试使用SqlFunctions.StringConvert,它会将您连接到sql server,并且需要.Net 4+

searchQuery.Contains(SqlFunctions.StringConvert((decimal)SRMAs.PONumber))

这个函数似乎有点不稳定,当我旋转一个样本时,我不得不将int转换为十进制,以避免出现令人震惊的Invoiciation构建错误。

一个合适的方法是将searchQuery转换为PONumber的数字数据类型,并且您都设置好了。

EF 4不支持对查询执行ToString()方法。您需要将其更新为EF6,或者可以使用SqlFunctions.StringConvert函数,如下所示。

string searchQuery = collection["query"];    
var srmas = (
    from SRMAs in db.SRMAs
    join SRMAStatus in db.SRMAStatus on SRMAs.Id equals SRMAStatus.Id
    join PurchaseOrders in db.PurchaseOrders on SRMAs.PONumber equals PurchaseOrders.PONumber
    join Suppliers in db.Suppliers on PurchaseOrders.SupplierID equals Suppliers.SupplierID
    join SRMADetails in db.SRMADetails on SRMAs.Id equals SRMADetails.SRMAId
    where ids.Contains(SRMAs.Status) 
    && 
    (
        searchQuery.Contains(PurchaseOrders.suppliersOrderNumber)
        ||
        searchQuery.Contains(SqlFunctions.StringConvert((double)SRMAs.PONumber))
    )
    select new
    {
        SRMAs.Id,
        SRMAs.PONumber,
        SRMAs.CreatedOn,
        Suppliers.SupplierName,
        SRMAStatus.StatusName,
        PurchaseOrders.PODate, PurchaseOrders.suppliersOrderNumber
    }
).ToList();