我的LINQ to SQL dbml文件中有2个表,OrderDetails和Requests。 OrderDetailsID是请求表中的外键。
我想编写查询以根据OrderId从OrderDetails获取UnitCost的总和。 如果每个OrderDetailsID的请求表中有一行,并且Requests.Last.RequestType =“Refund”,我想减少主要总和的退款金额,否则如果没有基于OrderDetailsID的行,则添加到sum。
这是我实现它的方式。 我希望防止使用“For each”。
任何解决方案?
iRefund = (From od1 In dc.OrderDetails _
Where od1.OrderID =1 _
Select od1.UnitCost).Sum
Dim objOrderDetails = (From od1 In dc.OrderDetails _
Where od1.OrderID =1 _
Select od1)
For Each OrderDetail As ORM.Entities.OrderDetail In objOrderDetails
If Not OrderDetail.Requests Is Nothing Then
IF OrderDetail.Requests.Last.RequestType="Refund" Then
iRefund -= OrderDetail.UnitCost
End If
End If
Next
答案 0 :(得分:1)
如果你想使用Linq而不是for-each循环,你可以使用List的ForEach扩展方法:
Dim objOrderDetails = (From od1 In dc.OrderDetails _
Where od1.OrderId = 1 _
Select od1).ToList()
objOrderDetails.ForEach(AddressOf DecrementAmount)
Private Sub DecrementAmount(ByVal d As OrderDetail)
If d.Requests IsNot Nothing _
AndAlso d.Requests.Count > 0 _
AndAlso d.Requests.Last.RequestType = "Refund" Then
iRefund -= d.UnitCost
End If
End Sub
这假设iRefund是一个模块变量。