LINQ to Entities 无法识别方法“System.String ToString()”

问题描述 投票:0回答:1

我正在尝试构建一个 Linq to Entities 查询,该查询将表与字符串外键列连接起来,并且相关表 ID 具有整数 ID。 我知道设计数据库模式的人搞砸了,但不幸的是,无论出于何种原因,在这种情况下我无法更改数据库模式。

这是我得到的错误:

LINQ to Entities 无法识别“System.String ToString()”方法,并且该方法无法转换为存储表达式。

这是导致它的 linq(到实体)语句:

var query = from p in db.QBPOes
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            join s in db.tblSuppliers on p.VendorID equals s.SupplierID.ToString()
            where p.ID == poID
            select new 
            {
                p.ID,
                p.Date,
                p.VendorID,
                p.FirstName,
                p.LastName,
                s.SupplierWorkPhone,
                s.SupplierFaxNumber,
                p.CompanyName,
            };

我加入这些表是因为我想获得供应商的电话和传真号码。

c#-4.0 entity-framework-4 linq-to-entities
1个回答
2
投票

为了将 p.VendorID 转换为

integer
,您可以使用此解决方法。生成的 SQL 可能不太漂亮,但它应该可以工作,除非 p.VendorID 无法转换为整数

var query = from p in db.QBPOes
            let vendorId = db.QBPOes.Select(x => p.VendorID).Cast<int>().FirstOrDefault()
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            join s in db.tblSuppliers on vendorId equals s.SupplierID
            where p.ID == poID
            select new 
            {
                p.ID,
                p.Date,
                p.VendorID,
                p.FirstName,
                p.LastName,
                s.SupplierWorkPhone,
                s.SupplierFaxNumber,
                p.CompanyName,
            };

将 s.SupplierID 转换为字符串可能会更好,这样您就可以像这样重新排列查询

var query = from s in db.tblSuppliers
            let supplierID = db.tblSuppliers.Select(x => s.SupplierID).Cast<string>().FirstOrDefault()
            join p in db.QBPOes on supplierID equals p.VendorID
            join j in db.tblJobManagements on p.CustJob equals j.JobID
            where p.ID == poID
            select new 
            {
              p.ID,
              p.Date,
              p.VendorID,
              p.FirstName,
              p.LastName,
              s.SupplierWorkPhone,
              s.SupplierFaxNumber,
              p.CompanyName,
            };
© www.soinside.com 2019 - 2024. All rights reserved.