1

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>ますか?

4

3 に答える 3

1

あなたはおそらくこれが欲しいだけです

var result = from g in Context.Payment
    where g.CreatedDate >= DateStart
          && (g.Total - g.Fees) >= 3000
    select g;

右?合計 - 手数料が gte 3000 で、日付基準のすべての支払い。グループは意図されていないか、必要ではないようです。

于 2013-03-28T17:46:24.247 に答える
1

グループを再選択するには、from ステートメントを追加する必要があります。

var result = from g in Context.Payment
        where g.CreatedDate >= DateStart
        group g by g.Total - g.Fees into grp
        where grp.Key >= 3000
        from i in grp
        select i;
于 2013-04-01T18:00:43.910 に答える
0
var result = 
        from p in Context.Payment
        where p.CreatedDate >= DateStart
        group p by p.Total - p.Fees into g
        where g.Key >= 3000
        select g; // select group here

または、グループ化しないほうがよい:

var result = 
        from p in Context.Payment
        where p.CreatedDate >= DateStart &&
              (p.Total - p.Fees) >= 3000
        select p; 
于 2013-03-28T17:48:20.943 に答える