我写这个SQL查询LINQ到实体无法识别方法“的Int32 ToInt32(System.Object的)”方法
select
acc.DepartmentID,
dept.DepartmentName,
dept.DepartmentDivision,
county.CountyName,
sp.StateProvinceID
from [AccountDepartmentXREF] acc
inner join [Department] dept on dept.DepartmentID = acc.DepartmentID
left join [DepartmentStateCountyXREF] dscx on dscx.DepartmentID = acc.DepartmentID
left join [StateCounty] county on county.StateCountyID = dscx.StateCountyID
inner join [StateProvince] sp on sp.StateProvinceID = dept.StateProvinceID
where acc.AccountID = 1
,并希望使用LINQ to改写它,但我总是感到困惑时写左联接在LINQ,所以我决定用一个转换器,并与Linqer去了,这是它产生
from acc in db.AccountDepartmentXREF
join dscx in db.DepartmentStateCountyXREF on acc.DepartmentID equals dscx.DepartmentID into dscx_join
from dscx in dscx_join.DefaultIfEmpty()
join county in db.StateCounty on new { StateCountyID = Convert.ToInt32(dscx.StateCountyID) } equals new { StateCountyID = county.StateCountyID } into county_join
from county in county_join.DefaultIfEmpty()
join sp in db.StateProvince on acc.Department.StateProvinceID equals sp.StateProvinceID
where
acc.AccountID == 1
select new {
acc.DepartmentID,
acc.Department.DepartmentName,
acc.Department.DepartmentDivision,
CountyName = county.CountyName,
sp.StateProvinceID
}
所以当我在代码中把一切融合在一起
public List<DepartmentList> GetDepartmentsByAccountID(string email)
{
HWC = new HWCEntities();
List<DepartmentList> result = new List<DepartmentList>();
int id = CurrentUserID(email);
List<AccountDepartmentXREF> adx = HWC.AccountDepartmentXREFs.Where(w => w.AccountID == id).ToList();
foreach(var a in adx)
{
var query = from acc in HWC.AccountDepartmentXREFs
join dscx in HWC.DepartmentStateCountyXREFs on acc.DepartmentID equals dscx.DepartmentID into dscx_join
from dscx in dscx_join.DefaultIfEmpty()
join county in HWC.StateCounties on new { StateCountyID = Convert.ToInt32(dscx.StateCountyID) } equals new { StateCountyID = county.StateCountyID } into county_join
from county in county_join.DefaultIfEmpty()
join sp in HWC.StateProvinces on acc.Department.StateProvinceID equals sp.StateProvinceID
where
acc.AccountID == a.AccountID
select new
{
acc.DepartmentID,
acc.Department.DepartmentName,
acc.Department.DepartmentDivision,
CountyName = county.CountyName,
sp.StateProvinceID
};
foreach(var b in query)
{
result.Add(new DepartmentList
{
DepartmentID = b.DepartmentID,
DepartmentName = b.DepartmentName,
StateProvinceID = b.StateProvinceID,
DivisionName = b.DepartmentDivision,
CountyName = b.CountyName
});
}
}
return result;
}
我得到的错误
LINQ实体无法识别方法“的Int32 ToInt32(System.Object的)”方法,和这种方法不能被翻译成表达商店。
在
的foreach(询问变种B)
任何想法是如何解决这一问题?我环顾四周,但其他解决方案,我发现不处理连接
Google你的错误。第一页充满了解决方案。 – FCin
@FCin,是的,已经做到了。我知道了,但是我有一个允许在其中一个表中有空位的列。第一页上的这些解决方案都没有发现这可能是问题所在。 – Chris