2016-03-29 15 views
0

Der Versuch, Sagen, ich habe einezu kombinieren zwei Tabellen in LINQ

TableA 
string Name 
string Description 

TableB 
string Name 
string Value 

TableA und TableB sind nach Namen verbunden. (In der Theorie, das heißt nicht in DB erzwungen)

Ich möchte ein Objekt erstellen:

public MyObject 
{ 
    string Name 
    string Description 
    List<string> Values 
} 

ich binden zu verstehen, wie diese mithilfe von LINQ zu kombinieren.

var tableA = _oda.GetTableA(); 
var tableB = _oda.GetTableB(); 
var model = from a in tableA 
join b in tableB on a.NAME equals b.NAME 
    select new MyObject 
    { 
     Name= a.Name, 
     Description = a.Description, 
     Values = "<Not sure to get list of tableb.Value>" 
    }; 
+0

Sicherlich ist der einfachste Weg * auszuwählen aus einem in das Objekt und die eingestellten Werte aus Tabelle b, wo a.name = b.name und wählen Sie nur den Wert – BugFinder

Antwort

2

Wenn es eine innere Verknüpfung, können Sie GroupBy verwenden, nachdem Ihr beitreten:

var tableA = new List<TableA> { new TableA { Name = "1", Description = "D1" }, new TableA { Name = "2", Description = "D2"} }; 
var tableB = new List<TableB> { new TableB { Name = "1", Value = "V1" }, new TableB { Name = "1", Value = "V2"} }; 

var result = tableA.Join(tableB, a => a.Name, b => b.Name, (a, b) => new { A = a, B = b}) 
    .GroupBy(k => k.A, e => e.B.Value) 
    .Select(g => new MyObject 
    { 
     Name = g.Key.Name, 
     Description = g.Key.Description, 
     Values = g.ToList() 
    }); 

foreach (var res in result) 
{ 
    Console.WriteLine("Name: {0}, Description: {1}, Value: {2}", res.Name, res.Description, string.Join(", ", res.Values)); 
} 
+0

Oh ich zu langsam war. Jetzt können Sie zwischen Verständnis und Lamba-Syntax wählen ;-). – schlonzo

1

Haben Sie den Code nicht versuchen, aber so etwas wie dies funktionieren sollte.

var result = from a in TableA 
      join b in TableB on a.Name equal b.Name 
      group b.Value by a into g 
      select new MyObject 
      { 
       Name = g.Key.Name, 
       Description = g.Key.Description, 
       Values = g.ToList() 
      } 
Verwandte Themen