2017-05-31 68 views
0

在我们的ASP.NET Core 1.1EF Core 1.1 app中,我们有一个类似于以下的情景:父表PT和子表CH具有1-1 FK关系。我们需要从PT表格的某些记录中获取几列,并从CH表格的关联记录中获取几列。 问题:我们如何将这些记录加载到以逗号分隔的字符串中?以下代码将这些相关记录加载到ViewModelEF-Core:将相关数据加载到字符串中

注:如果我们要加载的记录 - 成为一个逗号分隔的字符串 - 只是,比如说,从PT我们会做到以下几点:

string csv = string.Concat(
       PT.Select(
         p => string.Format("{0},{1},{2}\n", p.PTCol1, p.PTCol2, p.PTCol3))); 

PT

public class PT 
{ 
    Public int PTId {get; set;} 
    Public int PTCol1 {get; set;} 
    Public string PTCol1 {get; set;} 
    Public float PTCol1 {get; set;} 
    .... 
    public CH ch { get; set; } 
} 

CH

public class CH 
{ 
    Public int CHCol1 {get; set;} 
    Public string CHCol2 {get; set;} 
    .... 
    public int? PTId { get; set; } 
    public PT pt { get; set; } 
} 

视图模型:

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;} 
.... 
} 

控制器:需要加载到这里逗号分隔的字符串

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

回答

1

使用LINQ到实体:

var pts = (from pt in context.PT 
      join ch in context.CH on pt.PTId equals ch.PTId 
      select new { 
       PTCol1 = pt.Col1, 
       CHCol1 = ch.CHCol1 
       // select other columns here... 
      }).ToList(); 

var ptsStringCollection = pts.Select(p => string.Format("{0},{1}", p.PTCol1, p.CHCol1); 
+0

我已经将答案标记为答案。您可能希望在代码的'string.Format(“{0},{1}”,p.PTCol1,p.CHCol1);'中添加换行符'\ n'。谢谢。 – nam