質問

私はLINQとエンティティのフレームワークに非常に慣れていません。 WCF RIAサービスを作成して、作成しているLightswitch Orders Managementアプリケーションに作成しようとしています。私はすでにLINQ(多くの頭痛の種で)を使用して7つまたは8つのクエリを作成しましたが、私は成功しました。次に、3つのテーブルを使用して、月ごとに合計と総計を取得するクエリを作成する必要があります。

detailsventes(saledetails)で構成される:dateoforder、数量、unitprice、total ... etcientachat(購入)(購入)が同じフィールド料金(費用)で構成される:dateofexpense、expensetype、cost ...などで構成される。

今、私は月あたりの純利益を見つけるクエリを望んでいます(収入= TotalSales-TotalPurchases-TotalexPenses)

このクエリを試しました

      Return From od In Me.Context.DetailsVentes
                From od2 In Me.Context.DetailsAchats
                   From od3 In Me.Context.Charges
              Group By Month = od.Vente.DateCommande.Month, Year = od.Vente.DateCommande.Year
              Into g = Group
              Select New TCR With {.Month = Month, .Year = Year, 
.MonthYearString = Month & "/" & Year, 
.TotalVentes = g.Sum(Function(s) (s.od.PrixUnitaire * s.od.Quantité)), 
.TotalAchats = g.Sum(Function(s) (s.od2.PrixAchat * s.od2.Quantité)), 
.TotalCharges = g.Sum(Function(s) (s.od3.Cout))}

Venteが販売(注文)、DifcuilingVentesはACHATが購入され、Distoalachatは料金を購入します。料金は費用です。

問題は、私が奇妙な結果を得たことです。すべての値(TotalVentes、Totalachats、Totalcharges)には13が掛けられます!

たとえば、2011年6月に10,000米ドルの合計がある場合、このクエリは130 000 USDを返します!

正しいクエリを取得しようとして、私は本当に4日間立ち往生しています。

私はlinq:pを繰り返します

どうもありがとうございました。

編集:@jasonアドバイスを試しました。

Return From c In Me.Context.Charges
                         Join v In Me.Context.DetailsVentes On c.DateCharge.Month Equals v.Vente.DateCommande.Month And c.DateCharge.Year Equals v.Vente.DateCommande.Year
                 Join a In Me.Context.DetailsAchats On c.DateCharge.Month Equals a.Achat.DateCommande.Month And c.DateCharge.Year Equals a.Achat.DateCommande.Year
 Group By month = c.DateCharge.Month, Year = c.DateCharge.Year
                 Into g = Group
Select New TCR With {.Month = month, .Year = Year, .MonthYearString = "", .TotalAchats = g.Sum(Function(c) (c.a.Quantité * c.a.PrixAchat)), .TotalCharges = 45000, .TotalVentes = 250000, .TCRSingle = 0}

そして、結果はまだ非常に奇妙です(非常に高い)!私が従うことができる例はありますか?

ありがとうございました。

役に立ちましたか?

解決

クエリをこのような3つのクエリに分割することで、ついにそれを機能させました:

Dim vt = From od In Me.Context.DetailsVentes
     Group By Month = od.Vente.DateCommande.Month, Year = od.Vente.DateCommande.Year
     Into g = Group
     Select New VentesParMois With {.Month = Month, .Year = Year,
                                   .TotalVentesSingle = g.Sum(Function(od) _
                                       (od.PrixUnitaire * od.Quantité))}



Dim at = From od In Me.Context.DetailsAchats
      Group By Month = od.Achat.DateCommande.Month, Year = od.Achat.DateCommande.Year
      Into g = Group
      Select New AchatsParMois With {.Month = Month, .Year = Year, 
                                    .TotalAchatsSingle = g.Sum(Function(od) _
                                        (od.PrixAchat * od.Quantité))}


Dim ct = From od In Me.Context.Charges
     Group By Month = od.DateCharge.Month, Year = od.DateCharge.Year
     Into g = Group
     Select New ChargesParMois With {.Month = Month, .Year = Year, 
                                   .TotalChargesSingle = g.Sum(Function(od) _
                                       (od.Montant))}



Dim q = From a In at.AsEnumerable, v In vt.AsEnumerable, c In ct.AsEnumerable
        Where a.MonthYear = v.MonthYear AndAlso a.MonthYear = c.MonthYear
                Select New TCR With {.Month = a.Month, .Year = a.Year, .TotalAchats = a.TotalAchats, .TotalVentes = v.TotalVentes, .TotalCharges = c.TotalCharges}


Return q.AsQueryable

ジェイソンありがとうございます。

他のヒント

デカルト製品ではなく、クエリのどこかに参加したいと思います(結合条件なしで参加)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top