2009-08-03 6 views
3

Je suis nouveau à Linq à Sql, ce que je voudrais réaliser est de créer une seule propriété en lecture seule sur la classe Entity qui est une combinaison de plusieurs champs, en particulier je veux créer un champ de nom qui combine-titre, prénom et nom de famille.Puis-je combiner des champs via Linq à Sql

Je peux voir comment faire en changeant le fichier .designer.cs mais sache que je ne suis pas supposé le toucher.

Je tente de faire cela de sorte que dans les données dynamiques, je reçois une seule colonne plutôt que plusieurs colonnes.

+0

(a répondu au commentaire) –

+0

Merci d'ajouter l'information supplémentaire re '[ScaffoldColumn (true)]'; Je vais le classer pour la prochaine fois ;-p –

Répondre

4

L'astuce ici est d'utiliser un partial class; créer un nouveau fichier .cs et dans le même espace de noms ajouter une nouvelle classe nommée pour votre type:

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

Ce combine avec le fichier de classe d'origine (généré). C'est une approche courante pour ajouter des fonctionnalités supplémentaires dans les entités générées (y compris le contexte de données). Vous pouvez également regarder "méthodes partielles", car un certain nombre de méthodes partielles sont définies et utilisées par LINQ-to-SQL.

Une mise en garde: si votre dbml est appelé MySystem.dbml, puis éviter créer un fichier MySystem.cs (probablement pour vos classes partielles); il y a un bug dans le générateur de code qui peut causer l'échec. Il suffit de le nommer quelque chose d'autre.

+0

Je l'ai fait mais dans Dynamic data ne le voyant pas apparaître dans la grille qui est construite, Y at-il autre chose que je dois faire? – Nathan

+0

Hmm ... Je ne sais pas. Si la propriété est disponible à partir de votre code * other *, je me demande si les données dynamiques regardent le méta-modèle (plutôt que les propriétés du type). Dans ce cas, il serait très difficile de le faire fonctionner. Il se peut aussi que les données dynamiques aient besoin de propriétés de lecture/écriture ... Je ne sais pas. –

+0

Trouvé la réponse. J'avais besoin d'ajouter l'attribut [ScaffoldColumn (true)] et maintenant il apparaît dans la grille. Charmant – Nathan

0

dans votre instruction select LINQ, pourquoi ne pas utiliser quelque chose comme:

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

Je ne sais pas si la syntaxe est là à 100% mais vérifiez l'idée.