簡體   English   中英

在Linq to SQL中,如何按父屬性對子項進行分組

[英]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子句中的范圍變量bf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM