Поскольку в этом вопросе отсутствовал ясность относительно DataType, я попытался высмеять его с помощью классов.Пожалуйста, измените код, чтобы он соответствовал вашим типам данных
public class Job
{
public string JobCode{get;set;}
public string JobName{get;set;}
public string PeriodRequired{get;set;}
public string JobType{get;set;}
public string JobGroupCode{get;set;}
public DateTime DateRequired{get;set;}
}
public class JobEstimate
{
public string JobCode{get;set;}
public string ProductCode{get;set;}
public int Qty {get;set;}
}
Например, данные
var jobList = new List<Job>(){
new Job{JobCode="abc1",JobName="JobName1",PeriodRequired="1",JobType="Q",JobGroupCode="GOLD"},
new Job{JobCode="abc2",JobName="JobName1",PeriodRequired="2",JobType="Q",JobGroupCode="GOLD"},
new Job{JobCode="abc3",JobName="JobName1",PeriodRequired="3",JobType="R",JobGroupCode="GOLD"},
new Job{JobCode="abc4",JobName="JobName1",PeriodRequired="1",JobType="Q",JobGroupCode="GOLD"}
};
var jobEstimateList = new List<JobEstimate>(){
new JobEstimate(){JobCode="abc1",ProductCode="10000",Qty=12},
new JobEstimate(){JobCode="abc1",ProductCode="10000",Qty=11},
new JobEstimate(){JobCode="abc2",ProductCode="10000",Qty=12},
new JobEstimate(){JobCode="abc3",ProductCode="10000",Qty=14},
};
Вы можете получить требуемый результат как
var result = jobList.Join(jobEstimateList,
job=> job.JobCode,
je=>je.JobCode,(job,je)=>new {
JobCode=job.JobCode,
JobName = job.JobName,
JobType = job.JobType,
JobGroupCode = job.JobGroupCode,
ProductCode = je.ProductCode,
PeriodRequired = job.PeriodRequired,
Qty = je.Qty})
.Where(x=>x.JobType=="Q" && x.JobGroupCode=="GOLD" && x.ProductCode=="10000")
.GroupBy(x=> x.PeriodRequired)
.Select(x=> new {PeriodId = x.Key,Qty= x.Sum(c=>c.Qty)});
Результат
PeriodId | Qty
1 | 23
2 | 12