私はアプリケーションの月に請求書を集計しようとしています。 2つのオブジェクトがあります。 Invoice
オブジェクトと、InvoiceDetails
オブジェクトとを含む。 Invoice
オブジェクトには請求書(日付、得意先など)に関する詳細が含まれ、InvoiceDetails
オブジェクトには各請求書の明細(数量、価格、税金など)が含まれます。私は請求書から来るお金に基づいて毎月の収入を計算したいと思います。 GroupBy
メソッドを使用して請求書を日付別に集計することはできますが、その月の総収入を得るInvoiceDetails
の広告申込情報を追加することはできません。オブジェクトは以下のとおりです。子要素のLINQ Sumクエリ
Invoiceクラス:
Public Class Invoice
Public Property InvoiceID As Integer
Public Property InvoiceDate As Date
Public Property DueDate As Date
Public Property Details As List(Of InvoiceDetail)
Public Property Client As Client
Public Property ClientID As Integer
End Class
InvoiceDetailsクラス:
Public Class InvoiceDetail
Public Property InvoiceDetailID As Integer
Public Property Description As String
Public Property UnitPrice As Decimal
Public Property Quantity As Integer
Public Property Subtotal As Decimal
Public Property Tax As Decimal
Public Property Total As Decimal
Public Property Invoice As Invoice
End Class
私の現在のLINQクエリは次のとおりです。
Public Function GetRevenueByMonth(Year As Integer, Month As Integer) As DataSourceResult
Dim StartDate As New Date(Year, Month, 1)
Dim EndDate As Date = StartDate.AddMonths(1).AddSeconds(-1)
Dim Revenue = _db.Invoices.Include(Function(i) i.InvoiceDetails
.Select(Function(invd) invd.Total))
.Where(Function(i) i.InvoiceDate >= StartDate And i.InvoiceDate <= EndDate)
.GroupBy(Function(i) i.InvoiceDate.Date)
.Select(Function(r) New With {
.Date = r.Key, .Revenue = r.Sum(Function(invd) invd.Total)
})
End Function
関数は最後から二番目の行まで正常に見えます。私は 'Total'が 'InvoiceDetail'のメンバーではないというエラーを受け取ります。私はinvd
が子要素を参照すると予想しますが、代わりに親要素を参照しています。このLINQクエリはどのように動作させることができますか?
にだけ注意を助ける次
希望を行うことができます:あなたは '.AddSeconds(-1)'、あなたが 'i.InvoiceDate <を使用することができなかった場合EndDate'を実行し、1秒の端数を心配する必要はありません。 23:59:59.95で請求された請求書を翌日に含める場合を除きます。 –
特定の年と月の請求書の合計を取得したいと思っていますか? 'Invoice'は' InvoiceDetails'にどのように接続されていますか? - 「Invoice」と「InvoiceDetails」の宣言は、口頭での説明よりも私たちを助けるかもしれません。 –
'InvoiceDetails'は' Invoice'の子オブジェクトの集合です。請求書には、 'InvoiceDetails'と呼ばれる項目のコレクションがあります。各広告申込情報には、数量と価格とともに明細説明があります。その月の各広告申込情報の価格を合計します。 – Nse