Schleife durch LINQ-Feld-Werte
Ich habe eine text-Datei mit Platzhaltern wie:
Danke für Ihre Bestellung [OrderNo]. Ihre Bestellung wird versandt werden:
[Name]
[Street1]
[Street2] etc
Die Platzhalter sind die Feldnamen in der Datenbank von eckigen Klammern umgeben.
Möchte ich abrufen eines einzelnen Datensatzes aus der Datenbank wie:
var order = (von o in testContext.OrderTables wo o.OrderID == id select o).Single();
Dann möchte ich in der Lage sein, um eine Schleife durch das order-Objekt und Holen Sie das Feld name, und der Wert zum ausfüllen der Platzhalter.
Ist das möglich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie wäre es damit:
Ich bin mir nicht sicher, ob ich es mag, aber es funktioniert. 🙂
Sicher. Nichts in das framework unterstützt diese jedoch. Sie haben zu tun, eine Suche nach den tags, dann verwenden Sie reflektion, um auf die entsprechenden Eigenschaften in Ihrem Auftrag-Objekt.
Ein weiterer, einfacher Weg (keine Reflexion) wäre die dump Ihre Reihenfolge in eine Hashtabelle... Hier einige pseudocode, das könnte tatsächlich funktionieren:
An dieser Stelle, alles, was Sie tun müssen, ist Holen Sie sich den string aus der Textdatei und den index in Ihren Haschisch.Offenbar Linq to Sql nicht, wie list-Initialisierungen in Abfragen. Sie möglicherweise in der Lage, wickeln Sie diesen in einen Methodenaufruf; ich bin mir nicht sicher.
Einer kleinen Modifikation und erhalten Sie diese arbeiten version:
Es ist nicht so elegant, weil Sie stolpern, die Linq-call über ToArray(), die zurück ziehen aller Aufträge. In das Ende, es ist wahrscheinlich am besten, nur um zu ziehen aus Ihrer Bestellung haben, Stopfen Sie die Informationen, die Sie brauchen, in einem hash, dann Bearbeiten Sie Ihre text-Datei. Sie werden erneut kompilieren müssen, wenn Sie Ihre änderungen an der Datenbank; wieder, es ist nicht so elegant wie mein Erster Versuch...
Für alle, die sich für eine Lösung, das funktionierte für mich, um eine Liste von E-Mails:
Könnten Sie in der Lage sein, es mit zu tun .GetType() und dann die reflektion verwenden, um auf die einzelnen Eigenschaften und deren Werte.
Können Sie nicht mit LINQ direkt zum Durchlaufen der Eigenschaften eines Objekts, da nicht mehr eine Aufzählung von den Eigenschaften des Objekts für das Objekt verfügbar. Sie können jedoch, verwenden Sie Reflektion, um auf die Eigenschaften eines Objekts. LINQ kann in handliches kommen, wenn man durch diese zu finden das geeignete Objekt für Ihre Platzhalter.
BEARBEITEN: Die oben genannten Beispiel wurde geschrieben, um zu veranschaulichen, wie LINQ verwendet werden könnten. Meine Vorliebe ist eigentlich über eine helper-Methode, um Werte von name. Beachten Sie, dass die unten beschriebene Methode geht davon aus, dass die Eigenschaft vorhanden ist, aber könnte leicht modifiziert werden, um null zurück, wenn die Eigenschaft nicht vorhanden ist. In meinem Sprachgebrauch auf meine Anrufe werden verifiziert durch unit-tests, so dass ich nicht die Mühe mit dem extra-check.