2012-07-12 54 views
0

我有一個支付系統,如下所示。付款可以通過多個禮券。禮券與購買一起發行。客戶可以使用這個禮券以備將來購買。當通過禮券進行支付時,GiftCoupon表中的UsedForPaymentID列將使用該PaymentID更新(用於Giftcoupon ID)。 PaymentID是GiftCoupon表中的外鍵。在LINQ to SQL中查找參考對象的有效方法

我需要寫一個方法:

public DateTime GetPaymentDate(int GiftCouponID) 

這種方法會發現其支付使用禮券的日期。

爲了實現這一點,我可以做以下步驟

  1. 查找使用GiftCouponID的GiftCoupon對象(從GiftCoupon庫)
  2. 查找從GiftCoupon對象PaymentID。儲存於@PID可變
  3. 使用@PID變量找到(從收支庫)支付對象
  4. 查找付款對象

的PAYMENTDATE是否有LINQ這樣做的更簡單/快捷方式到SQL?

enter image description here

回答

1
var c = context.GiftCoupons.FirstOrDefault(gc => gc.GiftCouponID == GiftCouponID); 
if (c != null && c.Payment != null) 
return c.Payment.PaymentDate 
+1

我不確定這是否正確,爲什麼UsedForPaymentID等於GiftCouponID? – KingCronus 2012-07-12 09:45:10

+0

固定。我的錯。 – 2012-07-12 09:47:43

2

你可以嘗試這樣的事情。

public DateTime GetPaymentDate(int GiftCouponID) { 
    using(var db = new YourDataContext()) // Create a datacontext 
    { 

     GiftCoupon gc = db.GiftCouple.SingleOrDefault(g=>g.GiftCouponID == GiftCouponID) 
     if(gc != null) 
      return gc.Payment.PaymentDate; 
     else 
      throw new Exception("No such GiftCouponID"); 
    } 
} 

我已經添加了基本的錯誤檢查,你可能需要更多/更少依賴於你的系統是如何工作的。顯然你也需要改變DataContext的名字。

假設你所有的關係都正確設置,這個(或類似的)應該適合你。

+0

由於Amiram(如下)已經編碼,您可能還想要迎合您的GitfCouponID提供的事件尚未使用。即檢查一個空字段。 – KingCronus 2012-07-12 09:47:12