2009-03-17 13 views
1

Ich verwende LINQ, um 2 Databases beizutreten. Ich versuche nur 1 Feld von dtTable2 und alle Felder von dtTable1 zurückzubekommen. Wenn dieser Code ausgeführt wird, habe ich zwei Spalten. Die erste Spalte enthält den Wert von dtTable2.field2 und die zweite Spalte hat den Wert "System.Data.DataRow". Ich weiß, dass ich, wenn ich die Spalten in dtTable1 explizit angeben werde, die Ergebnisse haben werde, die ich brauche. Ist es möglich, einen Platzhalter anzugeben, um alle Spalten von dtTable1 zu erhalten?LINQ - Join 2 Databases - Platzhalter

Dim results = _ 
    From r In dtTable1.AsEnumerable _ 
    Join c In dtTable2.AsEnumerable _ 
    On c.Field1 Equals r.Field1 _ 
    Select c.field2, r 

Datagridview.datasource = results.ToList 

Antwort

3

Nein. Sie müssen die gewünschten Eigenschaften auflisten oder auf die Eigenschaften des Zeilenobjekts verweisen. Wenn es sich um eine stark typisierte Zeile handelt, können Sie sie in den Typ umwandeln und die Felder direkt in Ihrem Code verwenden.

Dim results = _ 
    From r In dtTable1.AsEnumerable _ 
    Join c In dtTable2.AsEnumerable _ 
    On c.Field1 Equals r.Field1 _ 
    Select c.field2, r.Field1, r.Field3, r.Field4 

Datagridview.datasource = results.ToList 
0

Es ist ein wenig peinlich, aber Sie können es mit einem List-Objekt und Concat tun. Ich bin nicht genug vertraut mit VB, um Ihnen die richtige Syntax zu geben, aber hier ist die C#

var results = from r in dtTable1.AsEnumerable() 
       join c in dtTable2.AsEnumerable() on c.Field1 equals r.Field1 
       select new List<object>(r.ItemArray).Concat(new List<object>() { c.Field2 }) 
datagridview.DataSource = results;