2013-04-17 32 views
1

我已經導入了一個數據庫,該數據庫與Subdata具有一對多關係的集合MainData,生成的代碼看起來像這樣;使用linq從兩個不同的模型中填充數據模型

public DbSet<MainData> MainDatas{ get; set; } 


public partial class MainData 
    {    
     public string NameOfMainData{ get; set; }   
     public virtual ICollection<SubData> SubDataSet{ get; set; } 
    } 

SubData只是有一些非複雜的數據類型,如字符串和整數。

我可以將數據導入視圖,所以我知道那部分工作。我想合併到一個模型,以便我有「NameOfMainData和一個SubData的集合在同一模型中爲視圖中的簡單acsess,但我沒有得到它的工作,這是我的嘗試;

Model ;

public class DataIWantInAList 
{ 
    public IList<DataIWant> DataList { get; set; } 

} 
public class DataIWant 
{ 
    public string NameOfMainData{ get; set; } 
    public IEnumerable<SubData> SubDataSet{ get; set; } 
} 

在我以爲我可以添加項目在DataList控件,但我沒能在互聯網上找到任何東西,或做出來了我自己......控制器與此;

var DataToView= from p in db.MainData 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData, 
          SubDataSet= p.SubDataSet 
         }; 


return View(DataToView); 

不要工作,因爲我不太喜歡LINQ,但感覺這很容易,這讓我感到非常沮喪,當我沒有得到它的工作。

任何輸入appriciated。

+0

你特別想知道如何用Linq做到這一點,所以這本身並不是一個答案,但你有沒有考慮過使用AutoMapper(http://automapper.org/)?使這種事情變得更容易。 –

回答

1

免責聲明
- 數據抓取您使用的EntityFramework的假設下作出,因爲我不是在LINQ優勝劣汰的唯一:(請隨時調整它
- 這僅僅是一個很多方式,嘗試實驗當你給模型的視圖
- 參數應該是一個「過濾器」的基本佔位符
- 您可以以任何你喜歡的方式擴大映射,只要確保正確參考在視圖中,否則您將遇到運行時錯誤

在模型中,你可以做這樣的事情(即使我將實體獲取移動到一個私有函數。在你的類DataIWant中,你只需指定你想要的數據。如果你想專門映射,那麼這樣做對你的DataIWantInAList

public class DataIWantInAList 
{ 
    public IList<DataIWant> data; 

    //Instanciation & Initialization 
    public DataIWantInAList(params customparam) 
    { 
     using(EntitySet ent = new EntitySet()) 
     { 
     //fetch data from DB 
     this.data = (from x in ent.DataTableIWant where param == customparam select x).ToList(); 
     } 
    } 
} 

,並在控制器開始你可能會想要去:

public ActionResult fooBar() 
{ 
    DataIWantInAList model = new DataIWantInAList(params); 
    return View(model); 
} 

,同時你可以得到的方式在您的視圖中的數據像這樣:

var List = model.data; 
+0

謝謝我會試試這個,但試着將它移動到另一個功能(或者可能在控制器?)。:) – Tim

+0

得到它的工作完美無缺,謝謝:) – Tim

0

假設我理解你的問題,你可以使用.Include(...)來獲取你想要的數據。

var DataToView = from p in db.MainData 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData.Include(p => p.SubDataSet) 
         } 
0

您可以使用Include加載相關實體,然後將它們映射到模型類型:

var DataToView= from p in db.MainData 
          .Include("ItemTypeReference") 
         select new DataIWant() 
         { 
          NameOfMainData= p.NameOfMainData, 
          SubDataSet= p.SubDataSet 
             .Select(s => new SubData { 
                 // map SubData fields here 
                 }) 
             .ToList() 
         }; 
+0

感謝您的幫助! :)我認爲SubDataSet中的select可能對我有用,但還沒有完成它的工作,但它似乎是要走的路。 – Tim

相關問題