C# 从SQL GROUP BY语句在实体框架中执行GROUP BY查询

C# 从SQL GROUP BY语句在实体框架中执行GROUP BY查询,c#,asp.net,vb.net,entity-framework,linq,C#,Asp.net,Vb.net,Entity Framework,Linq,我正在用VB.NET和ASP.NET编写一个发票系统,使用实体框架来存储我的对象。我想总结任何特定月份的所有可计费行项目,并将其整理成发票。以下SQL查询实现了这一点,但我无法首先在实体框架代码中使用它: SQL查询: SELECT DISTINCT [database].[dbo].[WorkOrderDetails].PriceCodeID, [database].[dbo].[WorkOrderDetails].[Description], SUM([databa

我正在用VB.NET和ASP.NET编写一个发票系统,使用实体框架来存储我的对象。我想总结任何特定月份的所有可计费行项目,并将其整理成发票。以下SQL查询实现了这一点,但我无法首先在实体框架代码中使用它:

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]
我的目标是:

WorkOrder:WorkOrderID、日期、ClientID外键、WorkOrderDetail列表

WorkOrderDetail:WorkOrderDetail,PriceCodeID外键,描述,单价,数量,小计,税,总计,WorkOrderID外键

PriceCode:PriceCodeID、短码、描述、单价、税

我正在尝试使用下面的语句,但我不确定如何使用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()

您可以通过以下方式获得聚合结果:

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)
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)
newInvoice.Details = aggregate.AsEnumerable()
                     .Select(Function (wod) New WorkOrderDetail ...)