【问题标题】:Efficient Way for Finding Reference Object in LINQ to SQL在 LINQ to SQL 中查找引用对象的有效方法
【发布时间】:2012-07-12 09:37:11
【问题描述】:

我有一个如下所示的支付系统。可以通过多张礼券付款。礼券随购买一起发行。客户可以使用此礼券以备将来购买。当通过礼券进行付款时,GiftCoupon 表中的 UsedForPaymentID 列将更新为该 PaymentID(用于礼券 ID)。 PaymentID 是 GiftCoupon 表中的外键。

我需要写一个方法:

public DateTime GetPaymentDate(int GiftCouponID) 

此方法将查找使用礼券进行付款的日期。

为此,我可以执行以下步骤

  1. 使用 GiftCouponID(来自 GiftCoupon 存储库)查找 GiftCoupon 对象
  2. 从 GiftCoupon 对象中查找 PaymentID。将其存储在@PID 变量中
  3. 使用@PID 变量查找支付对象(来自支付存储库)
  4. 从 Payment 对象中查找 PaymentDate

在 LINQ to SQL 中有更简单/有效的方法吗?

【问题讨论】:

    标签: c# .net linq entity-framework linq-to-sql


    【解决方案1】:

    你可以试试这样的。

    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的名称。

    假设您的所有关系都设置正确,这(或类似的东西)应该适合您。

    【讨论】:

    • 由于 Amiram(如下)已编码,您可能还需要满足您提供的 GitfCouponID 尚未使用的情况。 IE。检查空字段。
    【解决方案2】:
    var c = context.GiftCoupons.FirstOrDefault(gc => gc.GiftCouponID == GiftCouponID);
    if (c != null && c.Payment != null)
    return c.Payment.PaymentDate
    

    【讨论】:

    • 我不确定这是否正确,为什么 UsedForPaymentID 会等于 GiftCouponID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多