Entity Framework - la Sélection des colonnes spécifiques

J'ai une requête réussie qui relie les deux tables avec un où et orderby clause, mais je voulais ajouter à il suffit de sélectionner des colonnes spécifiques au lieu d'obtenir tout retour.

PARTIE 1
Lorsque je tente cela je reçois des erreurs de syntaxe sur le orderby ligne, si je retire la orderby ligne les erreurs de syntaxe déplacer à l'endroit où la ligne.

Erreur 3 Ne peut pas convertir implicitement le type de Système.Linq.IOrderedQueryable' à 'Système.Linq.IQueryable'. Une conversion explicite existe (vous manque un plâtre?)

            IQueryable<VendorProfile> query = _db.VendorProfiles
.Include("VendorCategories")
.Include("VendorsSelected")
.Select(s => new  { s.ProfileID, s.Name, s.CompanyName, s.City, s.State, s.DateCreated, s.VendorsSelected, s.VendorCategories })
.Where(x => x.VendorsSelected.Select(s => s.UserName).Contains(HttpContext.Current.User.Identity.Name))
.OrderBy(x => x.DateCreated);
if (criteria.name != string.Empty)
query = query.Where(v => v.Name.Contains(criteria.name));
if (criteria.company != string.Empty)
query = query.Where(v => v.CompanyName.Contains(criteria.company));
if (criteria.startDate != null && criteria.endDate != null)
query = query.Where(v => v.DateCreated > criteria.startDate && v.DateCreated < criteria.endDate);
if (criteria.categories != null && !criteria.categoryMatchAll)
query = query.Where(v => criteria.categories.AsQueryable().Any(cat => v.VendorCategories.Select(vendCat => vendCat.CategoryID).Contains(cat)));
if (criteria.categories != null && criteria.categoryMatchAll)
query = query.Where(v => criteria.categories.AsQueryable().All(cat => v.VendorCategories.Select(vendCat => vendCat.CategoryID).Contains(cat)));
if (criteria.minorityType != null)
query = query.Where(v => v.MinotiryOwned == criteria.minorityType);
if (criteria.diversityClass != null)
query = query.Where(v => v.DiversityClassification == criteria.diversityClass);
return query.ToList();

PARTIE 2
Je voulais aussi savoir si je pouvais extraire les colonnes sélectionnées dans un modèle de vue de classe, j'ai donc fatigué et je obtenir les mêmes résultats que ci-dessus sur la orderby ligne

Erreur 4 Impossible de convertir implicitement le type de Système.Linq.IOrderedQueryable' à 'Système.Linq.IQueryable'. Une conversion explicite existe (vous manque un plâtre?)

  • utilisation var au lieu de IQueryable<VendorProfile>?
  • pas sûr que je peux, il y a plusieurs sélectif où l'une des clauses qui suivent la requête (ajouté à l'OP). Pouvez-vous suggérer une autre solution viable pour le code ci-dessus?
  • pourquoi? var laisse le compilateur de déduire le type correct si vous définissez le type de manière explicite et le type n'est pas valable en fonction de ce que vous retourner. Vous pouvez passer la souris sur var pour voir ce que le type est vraiment. Actuellement c'est comme si vous aviez une fonction qui renvoie l'octet mais vous affecter le résultat à une variable de chaîne (string myVal = GetByte();) si vous utilisez var myVal = GetByte(); le compilateur sait que myVal doit être byte et le compiler pour être une variable d'octet. En d'autres termes à l'exécution, il sera toujours fortement typé, mais au moment de la compilation vous demander au compilateur de faire le sale travail.
  • si je le fais, var tous les où l'une des clauses ci-dessus donnent "Une conversion explicite existe vous manque un cast"
  • Peut-être que vous voulez déplacer la partie RÉPONSE pour la réponse et le marquer comme acceptée?
  • fait, mais je ne peux pas accepter ma propre réponse. J'espère que certains LINQ expert peut m'aider, ce post
  • S'il vous plaît, pourriez-vous clairement ce problème est de gauche alors?
  • le nouveau problème a été posté ici

InformationsquelleAutor SQLGrinder | 2013-03-20