给定RowID和要更新的值,如何更新表行。 MVC C#Linq

时间:2017-08-18 00:41:32

标签: c# asp.net-mvc linq paypal

这是我的代码。 PayPal向ActionResult发送RowID,其为item_number,交易ID为pp_txn_id。我很简单想要引用我的交易表tblPayPalTransactions中的行,然后用pp_txn_id更新它,我看到它是在PayPal购买后发回给我的。然后将照片链接发送到DownloadPicture.cshtml视图。

我根本无法找出更新事务表的语法。我能做的一切。试图完成一个项目。

//ROW IN PHOTOS IS item_number, PAYPAL PAID TRANSACTION IS pp_txn_id
public ActionResult thankyou(string item_number, string pp_txn_id)
{

    var photo = db.PayPalTransactions.Where(x => x.RowID == Convert.ToInt32(item_number));
    photo.pp_txn_id = pp_txn_id;
    db.SubmitChanges();

    var thisPaidPhoto = (from p in db.Photos
                         where p.PhotoId == Convert.ToInt32(item_number)
                         select p).FirstOrDefault();

    return View(thisPaidPhoto);
}

2 个答案:

答案 0 :(得分:2)

您当前的代码会出现编译错误,因为Where方法会返回一个集合。所以基本上photo变量将是一个集合类型,它不会有pp_txn_id属性。

假设rowid是该表中记录的唯一标识符,则需要获取单个记录。

您可以使用FirstOrDefault方法。

var rowId=Convert.ToInt32(item_number)
var photo = db.PayPalTransactions.FirstOrDefault(x => x.RowID ==rowId);
if(photo!=null)
{
   // update now
   photo.pp_txn_id = pp_txn_id;
   db.SubmitChanges();
}
else
{
  // item does not exist in table. Handle as needed.
}

另请注意,如果输入不是有效的数值,Convert.ToInt32方法将抛出异常。我会使用Int32.TryParse来保证安全。但如果您确定值始终是数字类型,我建议您使用数字类型作为参数(intlong)。

答案 1 :(得分:0)

public ActionResult thankyou(string item_number, string pp_txn_id)
{

    var photo = db.PayPalTransactions.SingleOrDefault(x => x.RowID == Convert.ToInt32(item_number));
    if(photo != null){
        photo.pp_txn_id = pp_txn_id;
        db.SubmitChanges();


        var thisPaidPhoto = (from p in db.Photos
                             where p.PhotoId == Convert.ToInt32(item_number)
                             select p).FirstOrDefault();

        return View(thisPaidPhoto);
    }
    else
    {
        return View();
    }
}