2010-02-04 9 views
1
public List<NDT_Equipment> GetALLRecords() 
    { 
     using (NDT_DB) 
     { 
      return (from a in NDT_DB.NDTEquipment select a); 
     } 
    } 
  • où: NDT_DB - instance de classe de la classe de contexte de base de données autogenerated NDT_Equipment - classe partielle dans la classe de contexte de base de donnéesLINQ dans une fonction

  • ce que je veux:

    • retourner tous les enregistrements de la table NDTEquipment
  • ce que Im obtenir: « vous manque un casting » de chaque erreur je compile ..

question: - suis-je autorisé à utiliser la classe partielle NDT_Equipment comme une valeur de retour à utiliser dans mon ViewModel ?? ? ou je dois créer une classe spécifique pour contenir les résultats de cette instruction LINQ et cette classe doit être utilisée dans mon VIEWMODEL?

+0

Ce n'est pas vraiment une "classe partielle". Tout le partiel fait référence au fait qu'une partie de la définition de la classe peut être dans plusieurs fichiers CS, pour être honnête. C'est un type à part entière. – BobbyShaftoe

Répondre

1

Si vous n'avez pas vraiment besoin d'utiliser les fonctionnalités fournies par List<NDT_Equipment> je voudrais changer la signature de la méthode pour retourner IEnumerable<NDT_Equipment> à la place:

public IEnumerable<NDT_Equipment> GetALLRecords() 
{ 
    using (NDT_DB) 
    { 
     return (from a in NDT_DB.NDTEquipment select a); 
    } 
} 

Mise à jour
Il semble y avoir quelque chose d'étrange dans le code bien; l'argument de type générique dans la méthode est NDT_Equipment tandis que l'entité de données est appelée NDTEquipment; Spécifiez-vous l'argument de type correct? Si vous pointez a dans votre code, quel type est-il signalé? C'est le type que vous devriez avoir dans l'argument de type générique.

+0

- je reçois une erreur "est-ce que vous avez manqué une distribution" si je l'ai changé pour IEnumerable – Dennis

+0

@Dennis: voir ma réponse mise à jour. (edit: Je vois maintenant que @Anders l'a également récupéré, mais laissera ma réponse, comme une solution alternative) –

7

Essayez ceci:

return (from a in NDT_DB.NDTEquipment select a).ToList(); 
+0

Impossible de convertir implicitement le type System.Collections.Generic.List 'à System.Collections.Generic.List Dennis

+0

Apparaît alors deux classes différentes, NDTEquipment et NDT_Equipment . –

+0

Anders .. vous avez raison .. c'est ma stupidité .. j'ai une autre classe définie comme NDT_Equipment (dont intelisense offert jadis quand j'étais codin) et la classe que je voulais qui est NDTEquipment (sans le trait de soulignement) merci !!! – Dennis

1

Je pense que vous obtenez l'erreur car l'instruction LINQ ne renvoie pas une liste (qui vos états de signature de la méthode). Essayez de changer cette ligne:

return (from a in NDT_DB.NDTEquipment select a); 

Pour:

return (from a in NDT_DB.NDTEquipment select a).ToList(); 
+0

Dup de http://stackoverflow.com/questions/2200445/using-linq-inside-a-function/2200468#2200468 –

+0

@Ruben Bartelink - Dans SO, nous avons des problèmes avec des questions en double, pas des réponses. – Oded

+0

@Oded: Je suis d'accord, mais dans ce cas, nous avons 3 réponses que a) sont des réponses valides b) sont la même chose c) la solution parce que l'interrogateur foiré. Je ne vois pas ce que les deux doublons trompeurs ajoutent. Mais je comprends à quel point il est difficile de supprimer un doublon une fois que l'on a eu un upvote. –

1

La requête LINQ est de retour d'un IQueryable, pas une liste, vous devez le convertir à une première liste:

return (from a in NDT_DB.NDTEquipment select a).ToList(); 
+0

Dup de http://stackoverflow.com/questions/2200445/using-linq-inside-a-function/2200468#2200468 –

Questions connexes