2010-06-10 6 views
2

Ce code est un no-goComment limiter certains éléments avec L2E/S?

var errors = (from error in db.ELMAH_Error 
     select new 
     { 
      error.Application, 
      error.Host, 
      error.Type, 
      error.Source, 
      error.Message, 
      error.User, 
      error.StatusCode, 
      error.TimeUtc 
     }).ToList(); 

return View(errors); 

comme il en résulte un 'nécessite un modèle de type IEnumerable' erreur. Le code suivant bien sûr fonctionne très bien, mais sélectionne toutes les colonnes, dont certains, je suis tout simplement pas intéressé par:

var errors = (from error in db.ELMAH_Error 
     select error).ToList(); 

return View(errors); 

Je suis flambant neuf à MVC2 + L2E, alors peut-être que je ne suis pas penser dans le bon état d'esprit encore, mais cela semble contre-intuitif. Existe-t-il un moyen facile de sélectionner un nombre limité de colonnes ou s'agit-il simplement d'utiliser un ORM?

Répondre

1

Ce n'est pas un problème avec L2E/L2S, mais plutôt avec des vues fortement typées MVC. Je parie que ce n'est pas seulement "nécessite un modèle de type IEnumerable", mais "un modèle de type IEnumerable<Something>". Si vous avez une vue fortement typée liée au type de votre table d'erreurs, essayer de lui passer le type anonyme créé par votre requête (via select new {...}) provoquera une incompatibilité de type.

Vous pouvez créer un nouveau type qui contient uniquement les lignes souhaitées et l'utiliser comme modèle de page de vue, ou vous pouvez effectuer la sélection complète, puis limiter les colonnes de votre code ASP.

+0

Il s'agit en fait d'une vue fortement typée - suivait le tutoriel et a oublié à ce sujet, de sorte que l'explique. Si je comprends bien, je crée un nouveau type fort pour ma vue (cela va-t-il dans Models comme un fichier .cs standard?), Puis au lieu de référencer IEnumberable , je pointe la vue vers IEnumerable , et il sera lié à le modèle de View? – orlon

+0

Oui, c'est à peu près tout. Ensuite, changez votre requête de 'select new {...}' à 'select new MyNewType (...)' et vous êtes en or. – tzaman

Questions connexes