2012-05-08 57 views
-1

代碼:如何將linq對象轉換爲asp.net對象..?

Domain ob = new Domain(); 

[HttpPost] 
public ActionResult Create(Domain ob) 
{ 
    try 
    { 
     //// TODO: Add insert logic here 
     FirstTestDataContext db = new FirstTestDataContext(); 

     tblSample ord = new tblSample(); 
     ord = ob; 
     db.tblSamples.InsertOnSubmit(ord); 

     db.SubmitChanges(); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

在這裏,我得到一個錯誤這樣

無法隱式轉換類型 'mvcInsertLinqForms.Models.Domain' 到 'mvcInsertLinqForms.tblSample'

+1

你期待* ord = ob聲明做什麼?爲什麼你無緣無故創建一個新的'tblSample'? –

+0

賦值ord = ob在類型爲Domain的右側具有「tblSample」類型的左側。他們是可分配類型嗎? – rt2800

+0

@Jon期望可能很明顯,聲明應該將一個對象轉換爲另一個對象。這是語言/技術太過於束縛,無法理解和自動實現這樣的期望:) –

回答

0
[HttpPost] 
public ActionResult (Domain model) // or (FormCollection form), use form.get("phone") 
{ 
//--- 
return View(); 
} 
1

您不能分配ordob,因爲它們不是同一類型。您似乎試圖將視圖模型(ob)映射到您的域模型(tblSample)。你可以通過設置域模型的相應屬性做到這一點:

[HttpPost] 
public ActionResult Create(Domain ob) 
{ 
    try 
    { 
     tblSample ord = new tblSample(); 
     // now map the domain model properties from the 
     // view model properties which is passed as action 
     // argument: 
     ord.Prop1 = ob.Prop1; 
     ord.Prop2 = ob.Prop2; 
     ... 

     FirstTestDataContext db = new FirstTestDataContext(); 
     db.tblSamples.InsertOnSubmit(ord); 
     db.SubmitChanges(); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

,並避免做這種映射手動你可以使用這樣的工具,AutoMapper它可以幫助您映射來回的視圖模型之間的領域模型。