2017-05-31 1 views
0

Dans notre ASP.NET Core 1.1 avec EF Core 1.1 app, nous avons un scénario similaire à celui-ci: La table parent PT et la table enfant CH ont une relation FK 1-1. Nous devons obtenir quelques colonnes de certains enregistrements de la table PT et quelques colonnes des enregistrements associés de la table CH. Question: Comment pouvons-nous charger ces enregistrements dans une chaîne délimitée par des virgules? Le code suivant charge ces enregistrements liés à ViewModel.EF-Core: chargement des données liées dans une chaîne

Note: Si nous devions charger des enregistrements - dans une chaîne délimitée par des virgules - que, disons, PT nous ferions ce qui suit:

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

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

Controller: besoin de charger une chaîne délimitée par des virgules ici

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

Répondre

1

LINQ-to-entités:

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

J'ai marqué votre réponse comme une réponse. Vous pouvez ajouter le caractère de nouvelle ligne '\ n' dans' string.Format ("{0}, {1}", p.PTCol1, p.CHCol1); 'de votre code. Merci. – nam