假设我在实体框架中有2个对象
public class Foo {
int FooId {get;set}
[ForeignKey("FooId")]
public virtual ICollection<Bar> Bars { get; set; }
public DateTime ADate { get; set; }
}
public class Bar {
int BarId { get; set; }
int Data { get; set; }
}
即。一个Foo表和一个指向Foo行的FooId表。我现在想要通过Fate上的ADate进行分组并将所有条形日期相加以获得每天所有数据的总和: 像(这显然是不正确的)
dbContext.Foos.GroupBy(x=>x.ADate.Day).Select(f=>f.Bars).Sum(b=>b.Data)
第一位
dbContext.Foos.GroupBy(x=>x.ADate.Day)
返回IOrderedQueryable<IGrouping<int, Foo>>
- 但我希望将其转换为IOrderedQueryable<IGrouping<int, Bar>>
,其中每个Foo都被其子Bars属性替换
希望有道理吗? (必须稍微简化一下这个问题)
迄今为止我所做的最好的是
dbContext.Foos.GroupBy(x => x.ADate.Day)
.OrderBy(x => x.Key)
.Select(x => x.Sum(y => y.Bars.Sum(z => z.Data)));
总和总和 - 读起来很丑陋和低效(虽然生成的SQL可能会好吗?看起来仍然很难看)
编辑:好的 - 所以我在小组中意识到我可以做(x=>x.ADate.Day, x=>x.Bars)
- 但这似乎没有帮助!
答案 0 :(得分:0)
这是使用查询语法更容易完成的任务之一:
from f in Foos
from b in f.Bars
group b by f.ADate into g
select new {
g.Key,
Sum = g.Sum(x => x.Data)
}
仔细查看b
by子句中的范围变量f
和the group
。