繁体   English   中英

EF核心渴望加载到ViewModel

[英]EF-Core Eager Loading to a ViewModel

在带有EF Core 1.1 app ASP.NET Core 1.1 ,我有一个类似于以下情形:父表PT和子表CH具有1-1 FK关系。 我们需要从PT表的某些记录中获取一些列,并从CH表的相关记录中获取一些列。 问题 :如何使用以下LINQ查询将这些记录加载到以下ViewModel 注意 :我可以使用常规的LINQ Join等来完成它,但是对如何使用Eager Loading来做到这一点感到好奇

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(???);

您需要具有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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM