如何在linq中对数据进行求和和分组

时间:2015-02-23 14:08:04

标签: c# linq

这是我的表:enter image description here

无论如何,我想在linq中做的是使用outputCycleID将feedGiven列与logdate(我们可以截断时间......不需要)的组合并。

然后取出给定的最后7天的饲料总量并将其平均。

目前这就是我现在所得到的:

 public IQueryable<FeedingLog> getLastSevenDaysAverage(int intendedProductionCycleID)
    {
        var ListProductionCycleQuery = this.ObjectContext.FeedingLogs.Where(b => b.ProductionCycleID== intendedProductionCycleID);

        var SumResult = from s in ListProductionCycleQuery
                        group s by new {s.ProductionCycleID,s.feedGiven, s.LogDate} into g
                        select new {g.Key.ProductionCycleID, g.Key.LogDate g.Sum(y => y.feedGiven)};

        return ListProductionCycleQuery;
    }

我真的被linq困住了,通常情况下我会在sql中做到这一点,但如果我选择一个视图(没有主键问题),实体框架有点儿错误

我在代码中也遇到了这个问题:

enter image description here

基本上它表示无效的匿名类型成员声明符。必须使用成员赋值声明匿名类型的memmer。 提前感谢阅读和解决方案

2 个答案:

答案 0 :(得分:1)

您已在群组中添加了feedGiven,但这是您想要的一个字段

var SumResult = from s in ListProductionCycleQuery
                group s by new {s.ProductionCycleID,s.LogDate} into g
                select new {g.Key.ProductionCycleID, g.Key.LogDate g.Sum(y => y.feedGiven)};

此外,您要从函数返回原始查询,您可能希望定义一个类来表示分组/求和信息并返回该信息。

答案 1 :(得分:0)

省略Feed By-clause for feed Given:

var SumResult = from s in ListProductionCycleQuery
    group s by new {s.ProductionCycleID,s.LogDate} into g
    select new {g.Key.ProductionCycleID, g.Key.LogDate g.Sum(y => y.feedGiven)};