在LINQ中基于Foreign Table选择查询

时间:2011-03-02 00:28:58

标签: asp.net sql vb.net linq

我的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

1 个答案:

答案 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是一个模块变量。