2010-04-29 12 views
0

J'utilise ceci:type ou espace de nom est introuvable

public class ConstructionRepository 
    { 
     private CRDataContext db = new CRDataContext(); 

     public IQueryable<Material> FindAllMaterials() 
     { 
      //return db.Materials; 
      var materials = from m in db.Materials 
          join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id 
          select new Material 
          { 
           Mat_Name = m.Mat_Name, 
           MeasurementTypeId = Mt.Name, 
           Mat_Type = m.Mat_Type }; 
      return materials.AsQueryable(); 
     } 
    } 

Il me donne la seule erreur

  1. 'CrMVC.Models.Material' ne contient pas une définition pour ' MatId », 'MesName', 'MesType'

EDIT: 'MatId', 'MesName', 'MesType' sont juste faux noms que j'ai donné est-ce faux ..

+1

Apparaît Impossible de trouver MaterialsView. Vous avez manqué une inclusion ou une référence? Probablement provoque l'erreur 2 aussi. 3 inconnu – RvdK

Répondre

1

La classe Material doit avoir des propriétés définissables avec les mêmes noms que ceux utilisés dans votre nouvelle clause Material {...}, vous ne pouvez pas les créer uniquement.

+0

@Daniel Oh, je comprends maintenant –

4

Je dirais que la fixation de la première erreur serait un bon point de départ - êtes-vous certain que vous avez référencé l'assembly contenant MaterialsView dans votre projet et avez ajouté une directive using en haut de votre fichier de code pour inclure l'espace de noms pour MaterialsView? Les deux autres erreurs [voir éditer] Les première et troisième erreurs disparaîtront une fois que vous aurez correctement référencé et inclus le type MaterialsView.

Edit: CommeTejs points out in his answer, la deuxième erreur est certainement dû au fait que vous manquez un appel à AsQueryable.

+0

@Andrew regarde mon edit ... –

1

1) Assurez-vous que l'espace de noms de votre classe 'MaterialsView' est une référence dans ce fichier de code. S'il est référencé, vérifiez que le fichier est en construction et qu'il ne contient aucune erreur de compilation - parfois, il peut masquer la véritable erreur.

2) Une requête LINQ comme celle-ci retournera une instance IEnumerable, pas une IQueryable. Lorsque vous renvoyez du matériel, appelez materials.AsQueryable();

3) Je ne vois pas d'appel à ToList() dans cette méthode, où le compilateur vous dit-il que cette erreur est survenue?

+0

+1 La deuxième erreur est définitivement à cause de l'appel manquant à la capture attrayante 'AsQueryable'! –

+0

@Tejs regarde mon édition –

0

n'a pas pu être trouvé le type ou le nom d'espace de noms MaterialsView (vous manque une directive à l'aide ou une référence d'assemblage?)

(oui, ceci est une réponse).

+0

Vous ne pouvez pas voir cela, mais je roule mes yeux si fort en ce moment ... – Tejs

Questions connexes