2016-09-29 32 views
1

私はアプリケーションの月に請求書を集計しようとしています。 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クエリはどのように動作させることができますか?

+1

にだけ注意を助ける次

Dim Revenue = _db.InvoicesDetails .Where(Function(i) i.Invoice.InvoiceDate >= StartDate And i.Invoice.InvoiceDate <= EndDate) .GroupBy(Function(i) i.Invoice.InvoiceDate.Date) .Select(Function(r) New With { .Date = r.Key, .Revenue = r.Sum(Function(invd) invd.Total) }) 

希望を行うことができます:あなたは '.AddSeconds(-1)'、あなたが 'i.InvoiceDate <を使用することができなかった場合EndDate'を実行し、1秒の端数を心配する必要はありません。 23:59:59.95で請求された請求書を翌日に含める場合を除きます。 –

+0

特定の年と月の請求書の合計を取得したいと思っていますか? 'Invoice'は' InvoiceDetails'にどのように接続されていますか? - 「Invoice」と「InvoiceDetails」の宣言は、口頭での説明よりも私たちを助けるかもしれません。 –

+0

'InvoiceDetails'は' Invoice'の子オブジェクトの集合です。請求書には、 'InvoiceDetails'と呼ばれる項目のコレクションがあります。各広告申込情報には、数量と価格とともに明細説明があります。その月の各広告申込情報の価格を合計します。 – Nse

答えて

2

あなたは、これはあなた