2009-08-17 6 views
0

J'utilise le modèle de cadre d'entité pour interroger ma base de données et j'ai mis en quelques vues que je voudrais utiliser qui ont tous les mêmes paramètres de requête. Plutôt que d'écrire une grande liste d'instructions case-switch, je me demande comment faire cela par programmation en passant par l'objet view en tant que paramètre de ma méthode principale. Dans sql je ferais cela comme:Linq to Entity Framework Model - Comment faire pour basculer les vues par programme

public void Tables(string TableName) 
{ 
    using(EntityModel entity = new EntityModel()){ 
     string sql = "select * from " + TableName; 
     etc.... 
} 

Cependant, je ne peux pas voir comment faire une chose similaire avec le modèle-cadre de l'entité à savoir

public void Tables(Type TableName) 
{ 
    using(EntityModel entity = new EntityModel()){ 
     ObjectQuery<Users> oq = new ObjectQuery<Users>("EntityModel.Users", EntityModel); 
     var q = (from p in oq select p); 
} 

C'est très bien si vous savez ce type de table Vous ne pouvez pas passer un type en tant que paramètre car ObjectQuery ne peut pas accepter les variables, typeof() ou tout élément non codé en dur. Quelqu'un at-il des idées si cela est possible?

+0

Je suis presque peur de demander d'où viennent les ficelles. Si elles proviennent de l'extérieur de votre application (entrée de l'utilisateur?), Vous êtes mieux avec switch/case, pour des raisons de sécurité. –

+0

Tout est interne, ne vous inquiétez pas! Il n'y a pas d'autre entrée de l'utilisateur que de sélectionner un menu déroulant de l'affichage qu'il souhaite voir –

+0

S'il s'agit d'une application Web, ce type d'entrée utilisateur est toujours dangereux pour un utilisateur (car je peux utiliser Telnet sur le port 80 et parlez HTTP à votre serveur, cela dit, je vais tenter votre chance –

Répondre

0

Vous pouvez le faire avec Entity SQL, mais vous devez toujours connaître le type de retour de la requête. Si la requête renvoyait toujours le même type d'entité, je pense que vous ne passeriez pas dans un "TableName". Alors qu'est-ce que vous voulez vraiment hors de la requête? Une valeur scalaire? Les scalaires, après tout, sont tout ce que vous obtiendriez de votre exemple SQL. Vous pouvez le faire avec Entity SQL, spécifier le nom de l'ensemble d'entités sous forme de chaîne et récupérer les résultats scalaires. Voir: http://msdn.microsoft.com/en-us/library/cc716751.aspx

+0

Merci d'avoir pris le temps de nous aider –

0

Utilisez une méthode générique pour passer le type

public void Tables<TTableType>(string TableName) 
{ 
    using (EntityModel entity = new EntityModel()) 
    { 
      ObjectQuery<TTableType> oq = new ObjectQuery<TTableType>("EntityModel." + TableName, entity);  
      var q = (from p in oq select p); 
     } 
    } 
Questions connexes