Kindly help me implement this sql query that contains Joining and conditional COUNT and SUM in Linq:
SELECT
COUNT(distinct Spool.ISODwg+'-'+Spool.SpoolNo ) as All_Spool,
SUM(case when (JointFMC.SBNM='AG' and JointFMC.SF='S') then JointFMC.Size else 0 end) as All_DI,
COUNT(distinct case when (Spool.ReleaseNo is not null and Spool.ReleaseNo!='' ) then Spool.ISODwg+'-'+Spool.SpoolNo else null end) as Release_Spool,
SUM(case when (Spool.ReleaseNo is not null and Spool.ReleaseNo!='') and (JointFMC.SBNM='AG' and JointFMC.SF='S') then JointFMC.Size else 0 end) as Release_DI,
COUNT(distinct case when (JointFMC.RT_Status='Result Needed' or JointFMC.RT_Status='App. Needed' ) and (JointFMC.SBNM='AG' and JointFMC.SF='S') then Spool.ISODwg+'-'+Spool.SpoolNo else null end) as BL_Spool,
SUM(case when (JointFMC.RT_Status='Result Needed' or JointFMC.RT_Status='App. Needed' ) and (JointFMC.SBNM='AG' and JointFMC.SF='S') then JointFMC.Size else 0 end) as BL_DI
FROM Spool LEFT JOIN JointFMC ON (Spool.ISODwg = JointFMC.ISODwg and Spool.SpoolNo = JointFMC.SpoolNo)
Spool Class (partial)
public class Spool : ModelBase
{
#region Properties-------------------------------------------------------------------------------
//ISODwgNo
private string _iSODwgNo;
public string ISODwgNo
{
get { return _iSODwgNo; }
set
{
if (_iSODwgNo != value)
{
_iSODwgNo = value;
ValidateProperty("ISODwgNo", value);
OnPropertyChanged("ISODwgNo");
}
}
}
//ISODwg
private string _iSODwg;
public string ISODwg
{
get { return _iSODwg; }
set
{
if (_iSODwg != value)
{
_iSODwg = value;
ValidateProperty("ISODwg", value);
OnPropertyChanged("ISODwg");
}
}
}
//SpoolNo
private string _spoolNo;
public string SpoolNo
{
get { return _spoolNo; }
set
{
if (_spoolNo != value)
{
_spoolNo = value;
ValidateProperty("SpoolNo", value);
OnPropertyChanged("SpoolNo");
}
}
}
//Type
private string _type;
public string Type
{
get { return _type; }
set
{
if (_type != value)
{
_type = value;
ValidateProperty("Type", value);
OnPropertyChanged("Type");
}
}
}
//Area
private string _area;
public string Area
{
get { return _area; }
set
{
if (_area != value)
{
_area = value;
ValidateProperty("Area", value);
OnPropertyChanged("Area");
}
}
}
}
JointFMC Class (partial)
public class JointFMC : ModelBase
{
#region Properties------------------------------------------------------
//SBNM
private string _sBNM;
public string SBNM
{
get { return _sBNM; }
set
{
if (_sBNM != value)
{
_sBNM = value;
ValidateProperty("SBNM", value);
OnPropertyChanged("SBNM");
}
}
}
//ISODwg
private string _iSODwg;
public string ISODwg
{
get { return _iSODwg; }
set
{
if (_iSODwg != value)
{
_iSODwg = value;
ValidateProperty("ISODwg", value);
OnPropertyChanged("ISODwg");
}
}
}
//JointNo
private string _jointNo;
public string JointNo
{
get { return _jointNo; }
set
{
if (_jointNo != value)
{
_jointNo = value;
ValidateProperty("JointNo", value);
OnPropertyChanged("JointNo");
}
}
}
//SpoolNo
private string _spoolNo;
public string SpoolNo
{
get { return _spoolNo; }
set
{
if (_spoolNo != value)
{
_spoolNo = value;
ValidateProperty("SpoolNo", value);
OnPropertyChanged("SpoolNo");
}
}
}
//Size
private double? _size;
public double? Size
{
get { return _size; }
set
{
if (_size != value)
{
_size = value;
ValidateProperty("Size", value);
OnPropertyChanged("Size");
}
}
}
//SF
private string _sF;
public string SF
{
get { return _sF; }
set
{
if (_sF != value)
{
_sF = value;
ValidateProperty("SF", value);
OnPropertyChanged("SF");
}
}
}
//WeldRpNo
private string _weldRpNo;
public string WeldRpNo
{
get { return _weldRpNo; }
set
{
if (_weldRpNo != value)
{
_weldRpNo = value;
ValidateProperty("WeldRpNo", value);
OnPropertyChanged("WeldRpNo");
}
}
}
//RT_Status
private string _rT_Status;
public string RT_Status
{
get { return _rT_Status; }
set
{
if (_rT_Status != value)
{
_rT_Status = value;
ValidateProperty("RT_Status", value);
OnPropertyChanged("RT_Status");
}
}
}
#endregion
}
Regards