[英]How do I update a field of a record using linq
我正在嘗試做兩件事。 第一種是獲取Client表記錄的ID,並將其轉換為整數。 我的查詢可以,但是如何完成第二項任務-將Investments表(字段:Client_ID)中的記錄更新為第一個提到的ID。 謝謝你的幫助。 也許有更好的方法可以做到這一點。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,LastName,Fund,PurchaseDate,Shares,PurchasePrice,PurchaseAmount")] Investments investments)
{
if (ModelState.IsValid)
{
db.Ports.Add(investments);
db.SaveChanges();
//db.SaveChanges();
// write the Client_ID to the saved record
// first get the ID of the client
var q = (from c in context.Clients
where c.LastName == investments.LastName
select new
{
c.ID
}).ToList();
// next update the Client_ID of the Investment record
var result = (from p in context.Investments
where (p.LastName == investments.LastName)
&& (p.Client_ID == null)
select p);
//I'm not sure what to do next
//Context.SaveChanges();
return RedirectToAction("Index");
}
return View(investments);
}
++++++++++++++ new code 12/22/2016 - controller +++++++++++++++++
public ActionResult Create([Bind(Include = "ID,LastName,Fund,PurchaseDate,Shares,PurchasePrice,PurchaseAmount")] Investments investments)
{
if (ModelState.IsValid)
{
var clientId = (from c in context.Clients
where c.LastName == investments.LastName
select new
{
c.ID
}).ToList().First();
var productList = System.Collections.Generic.IList < Investments >{ investments };
foreach (var investment in investments)
{
investment.Client_ID = clientId;
}
db.Ports.Add(investments);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(investments);
}
+++++++++++++++++++++ model Investments +++++++++++++++++++++
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace StockHoldings.Models
{
public class Investments
{
public int ID { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Fund { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime PurchaseDate { get; set; }
[Required]
[Range(1, 1000)]
public int Shares { get; set; }
[Required]
[Range(0.01, 200.00)]
[DataType(DataType.Currency)]
public double PurchasePrice { get; set; }
[DataType(DataType.Currency)]
public double PurchaseAmount { get; set; }
}
您需要將實體標記為已修改:
foreach(var toUpdate in result){
toUpdate.Client_ID = q.First(); // or int.Parse(q.First());
Context.Entry(toUpdate).State = EntityState.Modified;
}
Context.SaveChanges();
但是,為什么不插入之前實際更新投資呢?
public ActionResult Create([Bind(Include = "ID,LastName,Fund,PurchaseDate,Shares,PurchasePrice,PurchaseAmount")] Investments investments)
{
if (ModelState.IsValid)
{
var clientId = (from c in context.Clients
where c.LastName == investments.LastName
select new
{
c.ID
}).ToList().First();
foreach(var investment in investements){
investment.Client_ID = clientId;
}
db.Ports.Add(investments);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(investments);
}
真正的問題是:
為什么要檢索其姓氏的clientid? 這是個好主意嗎 ? 也許您的端點也應該接收clientId?
您是否已經不能將clientId傳遞給初始視圖Bad或數據,並且已經在前端設置了此屬性來構建您的投資對象?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.