2010-07-12 5 views
1

Je travaille avec une base de données existante, en utilisant Entity Framework pour le générateur de requête dynamique. C'est un facteur clé ici. Je ne sais pas quels types d'objets je vais utiliser jusqu'à l'exécution, car l'utilisateur est autorisé à sélectionner les objets/propriétés qu'ils veulent avec le constructeur de requête ... Donc j'utilise ObjectQuery<EntityObject>.Entity Framework obtenant des paires attribut/valeur

Tout fonctionne très bien. Avec des références normales, l'utilisation d'une combinaison de .Include() et .Select() fait l'affaire. Cependant, j'ai quelques tables qui s'avèrent difficiles. Ce sont essentiellement des tables de propriétés, avec une paire nom/valeur d'attribut.

J'ai besoin que ces attributs soient affichés en tant que colonnes dans mon résultat, mais je ne suis pas sûr de savoir comment Entity doit faire cela. À l'heure actuelle, l'entité peut les trouver, mais elle renvoie simplement une liste des lignes d'attribut pertinentes à l'objet sur lequel je pose des questions.

Par exemple ...

Tableau principal:

customerid1 customerName 
customerid2 customerName2 

Attribute Table:

1 customerid1 attribute1 value1 
1 customerid1 attribute2 value2 
2 customerid2 attribute2 value3 

En fin de compte, je dois afficher:

customer  attribute1 attribute2 
------------------------------------ 
customername1 value1  value2 
customername2    value3 

droit maintenant, je reçois quelque chose de plus :

customer  attributes 
------------------------------------- 
customername1 attributeitemlistobject 
customername2 attributeitemlistobject 

Toutes les suggestions seraient grandement appréciées.

Répondre

1

On dirait que vous voulez quelque chose le long des lignes de:

var q = from c in Context.Customers 
     let attribute1 = c.Attributes.FirstOrDefault(a => a.Name.Equals("attribute1") 
     let attribute2 = c.Attributes.FirstOrDefault(a => a.Name.Equals("attribute2") 
     select new 
     { 
      customer = c.Name, 
      attribute1 = attribute1, 
      attribute2 = attribute2 
     };