【问题标题】:Linq Sum of child object property grouping by parent propertyLinq 子对象属性按父属性分组的总和
【发布时间】:2018-12-09 04:19:12
【问题描述】:

现在已经为此苦苦挣扎了几个小时,但似乎无法完全正确。通过 OleDB 连接加载大型数据集,以便使用 DataSets 和 DataTables

所以我有以下数据表

我想要做的是得到 JobEstimate.Quantity 按 Job.PeriodRequired 分组的总和,其中 Job.JobType = "Q", Job.JobGroupCode = "GOLD" 和 JobEstimate.ProductCode = "10000"

到目前为止,我得到的最好的代码是下面的代码,但只给了我第一个估算行的数量

var periodQuantity = from je in ds.JobEstimate
            join j in ds.Job on je.JobCode equals j.JobCode
            where je.ProductCode == "10000" &&
                j.JobType == "Q" &&
                j.JobGroupCode == "GOLD"
            group je by j.PeriodRequired into g
            select new { PeriodId = g.Key, Quantity = g.Sum(e => e.Quantity) };

【问题讨论】:

  • 能否分享您尝试的代码?
  • @AnuViswan 进行了许多不同的尝试。已添加最新的
  • 我已经更新了我的答案。你能检查一下吗

标签: c# linq sum grouping


【解决方案1】:

由于问题中的 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多