2017-01-29 15 views
0

私はオブジェクトを格納するために、Entity Frameworkを使用してVB.NETとASP.NETで請求システムを作成しています。特定の月のすべての請求可能な広告申込情報をまとめ、請求書に照合させます。SQL GROUP BYステートメントからEntity FrameworkでGROUP BYクエリを実行

SQLクエリ:

SELECT DISTINCT 
    [database].[dbo].[WorkOrderDetails].PriceCodeID, 
    [database].[dbo].[WorkOrderDetails].[Description], 
    SUM([database].[dbo].[WorkOrderDetails].[Quantity]) AS [Quantity], 
    SUM([Subtotal]) AS Subtotal, 
    SUM([Total]) AS Total 
FROM 
    [database].[dbo].[WorkOrderDetails] 
INNER JOIN 
    [database].[dbo].[WorkOrders] ON [database].[dbo].[WorkOrderDetails].[WorkOrderID] = [database].[dbo].[WorkOrders].[WorkOrderID] 
WHERE 
    [ClientID] = 182 
    AND [WorkOrders].[Date] >= '10/1/2016' 
    AND [WorkOrders].[Date] < '10/31/2016' 
GROUP BY 
    [PriceCodeID], [Description] 

このクエリの出力は次のようになります。

次のSQLクエリは、しかし、私はそれがEntity Frameworkのコード - 最初に働いて得ることができない、これを実現します
PriceCodeID | Description | Quantity | Subtotal | Total 
------------+-------------+----------+----------+-------- 
26   BOX REFILE  19   47.50 47.50 
28   BOX RETRIEVAL  15   37.50 37.50 
98   Del/Pu Out  376  545.20 545.20 
95   Shredding  16893  760.19 760.19 

私のオブジェクトは、次のとおりです。

  • WorkOrder:WorkOrderID、ダットE、(WorkOrderDetailの)(外部キー)、一覧に

  • WorkOrderDetailをCLIENTID:WorkOrderDetailID、PriceCodeID (外部キー)、説明、単価、数量、小計、消費税、合計、WorkOrderID (外部キー)

  • PriceCode:PriceCodeID、ショート、説明、単価、税

私は目を使用しようとしていますeステートメントを使用しますが、GroupByステートメントの使用方法は不明です。

newInvoice.Details = _db.WorkOrderDetails 
         .Include("WorkOrder") 
         .Where(Function(wod) wod.WorkOrder.Date >= newInvoice.StartDate And 
              wod.WorkOrder.Date < newInvoice.EndDate And 
              wod.WorkOrder.ClientID = newInvoice.ClientID) 
         .GroupBy(...) 
         .ToList() 

答えて

1

あなたは、EFは、LINQクエリで新しいエンティティタイプを作成することはできませんので、あなたが直接、このクエリで新しいWorkOrderDetailを作成することはできません

Dim aggregate = From wod in _db.WorkOrderDetails 
       Where wod.WorkOrder.Date >= newInvoice.StartDate And 
         wod.WorkOrder.Date < newInvoice.EndDate And 
         wod.WorkOrder.ClientID = newInvoice.ClientID) 
       Group wod By Key = New With { Key wod.PriceCodeID, Key Description } 
       Into Group 
       Select agg = Key.PriceCodeID, 
          Key.Description, 
          Quantity = Group.Sum(Function(wod) wod.Quantity), 
          Subtotal = Group.Sum(Function(wod) wod.Subtotal), 
          Total = Group.Sum(Function(wod) wod.Total) 

による集計結果を得ることができます。ただし、aggregate.AsEnumerable()を使用して続行することもできます。

newInvoice.Details = aggregate.AsEnumerable() 
        .Select(Function (wod) New WorkOrderDetail ...)