0

在我ASP.NET Core 1.1EF Core 1.1 app,我有類似以下的場景:父表PT和子表CH有1-1 FK-關係。我們需要從PT表格的某些記錄中獲取幾列,並從CH表格的關聯記錄中獲取幾列。 問題:如何使用以下LINQ查詢將這些記錄加載到以下ViewModel注意:我可以把它用常規的LINQ加入等完成,但很好奇如何,我們可以用做Eager LoadingEF-核心預先加載到一個ViewModel

視圖模型:

public class PT_CH_ViewModel 
{ 
Public int PTCol1 {get; set;} 
Public string PTCol1 {get; set;} 
Public float PTCol1 {get; set;} 
.... 
Public int CHCol1 {get; set;} 
Public string CHCol2 {get; set;} 
.... 
} 

控制器:這裏需要加載PT_CH_ViewModel並作爲列表返回它

.... 
PT pt = _context.PT 
       .Include(p => p.CH) 
       .Where(p => p.PTcol == selectedID); 
.... 
return View(???); 
+0

嗨,你可以使用automapper。 – Houtan

回答

1

您需要有一個導航屬性爲喲你的CH實體。一旦加載,您可以訪問導航屬性的內容。

public class PT 
{ 
    public int Col1 { get; set; } 
    ... 
    public virtual CH CH { get; set; } // optional, do not put [Required] attribute 
} 

public CH 
{ 
    public int Col1 { get; set; } 
    ... 
    [Required] // CH table needs PT table for the 1-1 relationship 
    public PT PT { get; set; } 
} 


PT_CH_ViewModel viewModel = new PT_CH_ViewModel() 
{ 
    PTCol1 = pt.Col1, 
    PTCol2 = pt.Col2, 
    PTCol3 = pt.Col3, 
    CHCol1 = pt.CH.Col1, 
    CHCol2 = pt.CH.Col2 
}; 


return View(viewModel); 

既然你需要它作爲一個列表,你可以這樣做:

var pts = _context.PT 
       .Include(p => p.CH) 
       .Where(p => p.PTcol == selectedID) 
       .Select(pt => new PT_CH_ViewModel() 
       { 
        PTCol1 = pt.Col1, 
        PTCol2 = pt.Col2, 
        PTCol3 = pt.Col3, 
        CHCol1 = pt.CH.Col1, 
        CHCol2 = pt.CH.Col2 
       }).ToList(); 

return View(pts); 

查看:

@model List<PT_CH_ViewModel> 
+0

在你的代碼的最後一個塊中:1)你的意思是'p.col1,... etc.'而不是'pt.col1 ...等等'2)我還需要將ToList()應用於' 「pts」或「pts」本身就是一個列表? – nam

+0

@nam它將返回一個'IEnumerable'。如果這是你需要的,你可以使用'ToList()'。我打算使用'pt =>'而不是'p =>'。編輯。 –