[英]In Linq to SQL how can you group children by a parent property
可以說我在實體框架中有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表和Bar表,其中FooId指向Foo行。 我現在想按Foo上的ADate分組,並對所有Bars Date求和,以得出每天所有數據的總和:像這樣(這顯然是不正確的)
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可以嗎?還是看上去很丑)
編輯:好的-所以我意識到在groupby中我可以做(x=>x.ADate.Day, x=>x.Bars)
-但這似乎沒有幫助!
這是使用查詢語法更容易完成的任務之一:
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)
}
仔細查看the group
by子句中的范圍變量b
和f
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.