0

誰かが以下の質問を手伝ってくれませんか。クライアントごとのすべての領収書の合計を選択しようとしています。しかし、selectセクションの'Total ='サブクエリが機能せず、次のエラーが発生します。

タイプ'AppName.Domain.Entities.AccountingEntry'の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。

そのクエリの後でToList()を実行しようとしましたが、同じ問題が発生します。linqを使用してサブクエリとしてSumを選択する標準的な方法は何ですか?

var receipts = (from ae in repo.AccountingEntries
                        join c in repo.Clients on ae.ClientId equals c.ClientId
                        join m in repo.Memberships on c.MembershipId equals m.MembershipId

                        where
                             (ae.EntryDate <= start) &&
                             (ae.ClientId != null) &&
                             (ae.AccountingEntryTypeId == (byte)Shared.AccountingEntryTypes.Receipt)


                        select new AppName.Reports.Clients.AgeAnalysis.Receipt
                        {
                            ClientId = (Guid)ae.ClientId,
                            Client = c.FirstName + " " + c.LastName,
                            Membership = c.Membership.Name,
                            Total = (from ae2 in repo.AccountingEntries where ae2.ClientId == ae.ClientId select ae2.Total).Sum()
                        });

ありがとう、ゲイリー

4

1 に答える 1

2

これは非常に複雑で不必要に思えます。エンティティモデルが適切に設定されている場合は、結合を削除して「groupby」句を使用することで簡略化できます。次のようなもの:

from ae in c.AccountingEntries    
where
    (ae.EntryDate <= start) &&
    (ae.ClientId != null ) &&
    (ae.AccountingEntryTypeId == (byte)Shared.AccountEntyrTypes.Receipt)
group by
    ae.Client into g
select 
    new AppName.Reports.Clients.AgeAnalysis.Receipt
    {
        ClientId = (Guid)g.Key.ClientId,
        Client = g.Key.FirstName + " " + g.Key.LastName,
        Membership = g.Key.Membership.Name,
        Total = g.Sum( p => p.Total )
    }
于 2013-03-26T20:43:32.193 に答える