LINQ
オラクルが気に入らない素晴らしい声明があります。
var result = from r in Context.Accounts
where Statuses.Contains(r.DEC_CD)
&& r.Deposit.Payments.Where(n => n.CreatedDate >= DateStart).Sum(n => n.Total - n.Fees) > 3000
select r;
残念ながら、.Where(...).Sum(...)
Oracle EF プロバイダーを使用して無効な SQL を作成します。
代わりにグループを使用して書き直そうとしました:
var result = from g in Context.Payment
where g.CreatedDate >= DateStart
group g by g.Total - g.Fees into grp
where grp.Key >= 3000
select g;
上記の例はコンパイルされません。
var result = from g in Context.Payment
where g.CreatedDate >= DateStart
group g by g.Total - g.Fees into grp
where grp.Key >= 3000
select new { g };
また、コンパイルされません
var result = from g in Context.Payment
where g.CreatedDate >= DateStart
group g by g.Total - g.Fees into grp
where grp.Key >= 3000
select grp.SelectMany(n => n);
Intellisense から動作するように見えますが、エラーが発生The type arguments for method SelectMany cannot be inferred from the usage
します。選択できるのは単に grp だけであり、それを選択するとIgrouping<decimal, Payment>' which has keys and multiple rows underneath. I just want the rows, hence the
.SelectMany`が取得されます
フラット化する方法はありIEnumerable<Payment>
ますか?