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