我正在用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]此查询的输出类似于以下内容:
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,Date,ClientID (外键),List ( WorkOrderDetail)WorkOrderDetail:WorkOrderDetailID,PriceCodeID (外键),描述,UnitPrice,数量,小计,税收,总计,WorkOrderID (外键)PriceCode:PriceCodeID,ShortCode,Description,UnitPrice,Tax我试图使用下面的语句,但我不确定如何使用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()发布于 2017-01-29 10:41:13
您可以通过以下方法获得聚合结果
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)您不能在此查询中直接创建新的WorkOrderDetail,因为EF不允许在LINQ查询中创建新的实体类型。但是您可以使用aggregate.AsEnumerable()继续:
newInvoice.Details = aggregate.AsEnumerable()
.Select(Function (wod) New WorkOrderDetail ...)https://stackoverflow.com/questions/41916310
复制相似问题