2009-06-25 22 views
1

Ich führe eine Abfrage auf meine XML-Datei mit Linq und wenn ich Daten aus dem XML-Dokument analysieren und erhalten, muss ich gegen einen DB gehen, um 2 Eigenschaften meines Objekts zu füllen. Ich kann zwei Anrufe durchführen, wie mein Stück zeigt, aber ich möchte nur einen Anruf machen und das Ergebnis zu erhalten, um die 2 EigenschaftenQuery Db aus einer Linq Query - C#

XDocument recentOrdersXDoc = GetResults(...); 

var q = from c in recentOrdersXDoc.Descendants("prop") 
     let handle = c.Element("handle") 
     select new ReturnResult() 
     { 
      ClientTemplateID = (string)c.Element("TemplateID"), 
      Handle = resultref != null ? (string)resultref.Attribute("handle") : null, 
      ClientID = DataContext.GetClientID((string)c.Element("TemplateID")), 
      ClientName = DataContext.GetClientName((string)c.Element("TemplateID")), 

     }; 

So zu füllen ClientID und ModifiedDate I 2 Anrufe tätigen müssen zu füllen. Es gibt eine Tabelle namens Clients, die diese 2 Spalten ClientID und ClientName enthält. Außerdem kann ich auf die Eigenschaft ClientTemplateID zugreifen, wenn ich sie als Parameter in GetClientID und GetClientName übergeben muss, da ich in meinem obigen Code das Ergebnis vom XDocument erhalten muss.

Antwort

2

Wie wäre es so etwas wie:

var q = from c in recentOrdersXDoc.Descendants("prop") 
     let handle = c.Element("handle") 
     let clientTemplateID = (string)c.Element("TemplateID") 
     let client = DataContext.Clients 
      .Where(x=>x.ClientTemplateID == clientTemplateID) 
      .Select(x=>new {x.ClientID, x.ClientName}).Single() 
     select new ReturnResult() 
     { 
      ClientTemplateID = clientTemplateID, 
      Handle = resultref != null ? 
        (string)resultref.Attribute("handle") : null, 
      ClientID = client.ClientID, 
      ClientName = client.ClientName 
     }; 

Diese noch liest nur die beiden Spalten, die Sie brauchen (ich musste einige Annahmen über Namen machen, obwohl).

+0

Marc: Das ist Genie. Wo und wie würde ich dieses Detailwissen von linq lernen? –

+1

Die späteren Kapitel von "C# in Depth" wären ein guter Anfang (wenn Sie Sprachspezifikationen wünschen), wie auch "LINQ in Action" (für allgemeinere Punkte). –