I have a linq statement that returns 0 row while it should return 2 rows and it is what I got from my converted sql query. don't know what is wrong in my linq statement. Below is the linq and the matching sql query that works.
var list = (from DataRow b in VisData.DbData.Tables["valuebuilding"].Rows
join DataRow g in VisData.DbData.Tables["valuegroup"].Rows
on b.Field<decimal>("VBD_BLDG_NUM") equals g.Field<decimal>("VGP_GROUP_ID") into buildinggroup
from r in buildinggroup
join DataRow c in VisData.DbData.Tables["constr"].Rows
on r.Field<decimal>("VBD_BID") equals c.Field<decimal>("CNS_BID")
join DataRow o in VisData.DbData.Tables["constrcom"].Rows
on c.Field<decimal>("CNS_BID") equals o.Field<decimal>("CNS_BID")
join DataRow d in VisData.DbData.Tables["constrdep"].Rows
on o.Field<decimal>("CNS_BID") equals d.Field<decimal>("CNS_BID")
where (!(r.RowState == DataRowState.Deleted || r.RowState == DataRowState.Detached)
&& !(o.RowState == DataRowState.Deleted || o.RowState == DataRowState.Detached)
&& !(c.RowState == DataRowState.Deleted || c.RowState == DataRowState.Detached)
&& !(d.RowState == DataRowState.Deleted || d.RowState == DataRowState.Detached)
&& r.Field<decimal>("CNS_PID") == VisData.PID)
select new BuildingGroupDetail()
{
GroupName = r.Field<string>("VGP_GROUP_NAME"),
BuildingNum = r.Field<decimal>("VBD_BLDG_NUM"),
Primary = r.Field<bool>("VBD_ISPRIMARY"),
Structure = c.Field<string>("CNS_STYLE"),
StructDesc = c.Field<string>("CNS_STYLE_DESC"),
AYB = d.Field<decimal>("CNS_AYB"),
Grade = o.Field<string>("CNS_GRADE"),
Class = o.Field<string>("CNS_STRUCT_CLASS")
}).ToList();
SQL:
SELECT
g.VGP_GROUP_NAME, b.VBD_BLDG_NUM, b.VBD_ISPRIMARY, c.CNS_STYLE,
c.CNS_STYLE_DESC, d.CNS_AYB, m.CNS_GROUP, m.CNS_STRUCT_CLASS
FROM
REAL_PROP.VALUEBUILDING b
LEFT JOIN
REAL_PROP.VALUEGROUP g ON b.VBD_BLDG_NUM = g.VGP_GROUP_ID
JOIN
REAL_PROP.CONSTR c ON b.VBD_BID = c.CNS_BID
JOIN
REAL_PROP.CONSTRCOM m ON c.CNS_BID = m.CNS_BID
JOIN
REAL_PROP.CONSTRDEP d ON m.CNS_BID = d.CNS_BID
WHERE
c.CNS_PID = 15594