假設我們有模型 A、B 和 C。A 與 B 和 C 具有多對多關系。我想創建以下聚合:
-------- ---------------- -------------- ---------
| a_id | b_value_sum | c_value_sum | c_count |
-------- ---------------- -------------- ---------
| 1 | 20 | 10 | 40 |
-------- ---------------- -------------- ---------
因此,對于每個 A,我想對每個 b 和 c 的 value 屬性求和,并計算所有 c。
首先我嘗試了:
dbContext.A
.Include(x => x.B)
.Include(x => x.C)
.GroupBy(x => x.Id)
.Select(g => new
{
Id = g.Key.ToString(),
..
});
但這不允許我選擇 B 或 C 的任何值。
我也試過:
context.A
.SelectMany(y => y.B)
.SelectMany(z => z.C)
.Select(v => new { Id = y.Id, ValueB = z.Value, ValueC = v.Value})
.GroupBy(x => x.Id)
.Select(g => new
{
Id = g.Key.ToString(),
ValueBSum = g.Sum(y => y.ValueB),
ValueCSum = g.Sum(y => y.ValueC),
ValueCCount = g.Count()
});
但這不起作用,因為 z 屬于典型 B 而不是 A。
任何想法如何達到預期的結果?
uj5u.com熱心網友回復:
對此類查詢使用查詢語法。它更具可讀性和易于維護。
var query =
from a in context.A
from b in a.B
from c in b.C.DefaultIfEmpty() // LEFT JOIN
group new { b, c } by a.Id into g
select new
{
Id = g.Key.ToString(),
ValueBSum = g.Sum(y => y.b.Value),
ValueCSum = g.Sum(y => y.c.Value),
ValueCCount = g.Count()
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444624.html
上一篇:在EFCore中按多列分組導致InvalidOperationException
下一篇:如何在LINQ中過濾先進后出記錄
