我正在尝试构建一个Linq to Entities查询,该查询将表连接到字符串的外键列,并且相关的表ID具有整数ID。我知道,我知道,无论是谁设计数据库模式搞砸了,但不幸的是,无论出于何种原因,我都无法在这种情况下更改数据库模式。
这是我得到的错误:
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。
以下是导致它的linq(to Entities)语句:
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,
};
我正在加入这些表格,因为我想获得供应商的电话和传真号码。任何帮助将不胜感激。
答案 0 :(得分: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,
};