2008-10-17 7 views
15

Nehmen wir an, ich habe eine Tabelle, die eine Spalte mit XML-Daten enthält. Innerhalb von SQL kann ich die folgende Anweisung ausführen:Verwenden von XQuery in Linq To SQL?

select top 10 *, 
     Content.value('(/root/item/value)[1]', 'float') as Value 
from  xmltabletest 
where Content.value('(/root/item/MessageType)[1]', 'int') = 1 

Die Ergebnismenge enthält nur die Datensätze mit diesen Kriterien und extrahiert sie einen Wert aus der XML in eine Spalte namens ‚Value‘. Schön und einfach.

Kann das Gleiche mit Linq To SQL erreicht werden?

Ich möchte SQL, um das schwere Heben zu tun und nur Daten zurückgeben, die meinen Kriterien entsprechen, anstatt einen möglicherweise massiven Datenblock auswählen, übertragen und dann verarbeiten zu müssen. Soweit ich das beurteilen kann, ist das im Moment nicht möglich, aber ich dachte, ich sollte fragen.

(Die Umgebung ist .NET 3.5, VS2008, SQL Server 2005, wenn das hilft)

+0

Ich bin auf die gleichen Probleme gestoßen und musste es mit gespeicherten Procs oder Ausführen von xquery Abfragen über den Datenkontext tun –

+0

Eigentlich werden wir die Datenkontextmethode verwenden. Irgendwie nervt es, aber es erledigt die Arbeit und wir haben nur eine Entität mit einer XML-Spalte. Sollte leicht sauber und organisiert sein. –

Antwort

5

Ich bin mir nicht ganz sicher, ob dies nun nicht mehr aktuell ist, sondern nach Scott Guthrie XML-Datentypen ist:

dargestellt als Zeichenfolgen in LINQ to SQL Entities. Sie könnten XLINQ verwenden, um in einer XML-Spalte innerhalb Ihres LINQ zu SQL-Entität abzufragen - aber diese Abfrage würde passieren in Ihrer mittleren Ebene (innerhalb ASP.NET). Sie können keine remote XQuery für die Datenbank ausführen und die zurückgegebenen Ergebnisse basierend auf der ersten Version filtern.

Also in Antwort auf Ihre Frage, würde ich "Nein" sagen.