2009-08-03 5 views
3

Ich bin neu bei Linq zu Sql, was ich erreichen möchte, ist eine einzige schreibgeschützte Eigenschaft für die Entity-Klasse zu erstellen, die eine Kombination mehrerer Felder ist, insbesondere möchte ich Erstellen Sie ein Namensfeld, das Titel, Vorname und Nachname kombiniert.Kann ich Felder über Linq mit Sql kombinieren

Ich kann sehen, wie man es tut, indem ich die .designer.cs Datei ändere, aber weiß, dass ich das nicht anfassen soll.

Ich versuche dies zu tun, so dass ich in dynamischen Daten eine einzelne Spalte anstelle von mehreren Spalten bekomme.

+0

(auf Kommentar antworten) –

+0

Danke für das Hinzufügen der zusätzlichen Informationen zu '[ScaffoldColumn (true)]' '; Ich werde das für das nächste Mal ablegen; -p –

Antwort

4

Der Trick hier ist die Verwendung eines partial class; Erstellen Sie eine neue CS-Datei, und im gleichen Namensraum fügen Sie eine neue Klasse für Ihren Typ mit dem Namen:

namespace My.Data.Namespace { 
    partial class Employee { 
     public string Foo { 
      get {return Forename + " " + Surname; } // etc 
     } 
    } 
} 

Diese kombiniert mit das Original (generiert) Klassendatei. Dies ist ein gängiger Ansatz zum Hinzufügen zusätzlicher Funktionalität zu generierten Entitäten (einschließlich des Datenkontexts). Sie können sich auch "partielle Methoden" ansehen, da eine Reihe von partiellen Methoden von LINQ-to-SQL definiert und verwendet werden.

Eine Einschränkung: wenn Ihr dbml MySystem.dbml genannt wird, dann vermeiden eine MySystem.cs-Datei erstellen (vermutlich für die partiellen Klassen); Es gibt einen Fehler im Code-Generator, der dazu führen kann, dass dies fehlschlägt. Nenne es einfach etwas anderes.

+0

Ich habe das getan, aber in Dynamischen Daten nicht sehen, dass es in dem Raster erscheint, das konstruiert wird, Gibt es noch etwas, was ich tun muss? – Nathan

+0

Hmm ... Ich weiß es nicht. Wenn die Eigenschaft aus Ihrem * anderen * Code verfügbar ist, frage ich mich, ob dynamische Daten das Metamodell (und nicht die Eigenschaften des Typs) betrachten. In diesem Fall wäre es sehr schwierig, es zum Laufen zu bringen. Es könnte auch einfach sein, dass dynamische Daten Lese-/Schreibeigenschaften haben wollen ... Ich weiß es nicht. –

+0

Die Antwort gefunden. Ich musste [ScaffoldColumn (true)] -Attribut hinzufügen und jetzt erscheint es im Raster. Schön – Nathan

0

in Ihrer LINQ Select-Anweisung, warum verwenden Sie nicht so etwas wie:

select new {FullName = x.FirstName + " " + x.Surname}; 

nicht sicher, ob die Syntax es 100%, aber die Idee überprüfen.

Verwandte Themen