2009-08-10 11 views

Odpowiedz

9

Przykład. Powinieneś dostać pomysł.

XElement xml = new XElement("companies", 
      from company in db.CustomerCompanies 
      orderby company.CompanyName 
      select new XElement("company", 
       new XAttribute("CompanyId", company.CompanyId), 
       new XElement("CompanyName", company.CompanyName), 
       new XElement("SapNumber", company.SapNumber), 
       new XElement("RootCompanyId", company.RootCompanyId), 
       new XElement("ParentCompanyId", company.ParentCompanyId) 
       ) 
      ); 
+0

Potrzebujesz tam .ToArray(). –

+1

dlaczego? Skopiowałem to z mojego projektu. –

1

Twoje zapytanie Linq powróci do pewnego rodzaju wykresu obiektów; Po uzyskaniu wyników możesz użyć dowolnej metody, aby przetłumaczyć ją na XML, używając standardowych obiektów. Linq to XML zawiera nowe klasy XML, które przedstawiają jeden sposób tworzenia XML (patrz odpowiedź rAyt na to), ale możesz także użyć XmlSerializer i umieścić atrybuty na twojej klasie/właściwościach, aby kontrolować dokładne dane wyjściowe XML.

1

Poniższy kod będzie działał dla "linq to entity". Dane muszą znajdować się w pamięci, wykonane za pomocą .ToArray(), aby można było nad tym popracować, w kwestii mówienia.

XElement xml = new XElement("companies", 
     from company in db.CustomerCompanies.AsEnumerable() 
     orderby company.CompanyName 
     select new XElement("company", 
      new XAttribute("CompanyId", company.CompanyId), 
      new XElement("CompanyName", company.CompanyName), 
      new XElement("SapNumber", company.SapNumber), 
      new XElement("RootCompanyId", company.RootCompanyId), 
      new XElement("ParentCompanyId", company.ParentCompanyId) 
      ) 
     ); 
+0

.AsEnumerable() powinno wystarczyć, aby zapobiec złym metodom eskalacji do generatora wyrażeń IQueryable. – springy76

+0

@ springy76 Tak, absolutnie słusznie. .AsEnumerable() powinno działać równie dobrze, jeśli nie lepiej! – txavier