Entity Framework - Auswahl bestimmter Spalten

Habe ich eine erfolgreiche Abfrage, links zwei Tabellen mit einer where und orderby-Klausel, aber ich wollte noch hinzufügen, wählen Sie nur bestimmte Spalten, anstatt alles wieder zurück.

TEIL 1
Wenn ich versuche, bekomme ich syntax Fehler auf die orderby-Linie, wenn ich entfernen Sie die orderby-Zeile der syntax-Fehler zu bewegen, um die where-Zeile.

Fehler 3 kann Nicht implizit konvertiert Typ 'System.Linq -.IOrderedQueryable' zu 'System.Linq -.IQueryable'. Eine explizite Konvertierung vorhanden ist (fehlt ein cast?)

            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();

TEIL 2
Ich wollte auch wissen, ob ich extrahieren Sie die ausgewählten Spalten in einer view-model-Klasse, so dass ich müde dieser und ich bekomme die gleichen Ergebnisse wie oben auf dem orderby-line

Fehler 4 kann Nicht implizit konvertiert Typ 'System.Linq -.IOrderedQueryable' zu 'System.Linq -.IQueryable'. Eine explizite Konvertierung vorhanden ist (fehlt ein cast?)

verwenden var statt IQueryable<VendorProfile>?
nicht sicher, ob ich kann, es gibt mehrere selektive where-Klauseln, die Folgen, die Abfrage (Hinzugefügt OP). Können Sie schlagen eine andere praktikable Lösung zu den oben genannten code?
warum? var nur lässt der compiler zu schließen, die richtige Art, wenn Sie den Typ explizit und der Typ ist nicht gültig nach dem, was Sie zurück. Sie können bewegen Sie den Mauszeiger über var um zu sehen, was der Typ wirklich ist. Derzeit ist es so, wie wenn Sie hatte eine Funktion, die zurückgibt, byte, sondern Sie zugewiesen das Ergebnis in string-variable ( string myVal = GetByte(); ), wenn Sie var myVal = GetByte(); der compiler wissen, dass myVal werden sollte, byte und kompilieren Sie es in eine byte-variable. In anderen Worten: zur Laufzeit wird es immer stark typisiert, aber zur compile-Zeit, die Sie Fragen Sie den compiler, die Drecksarbeit zu machen.
wenn ich es var allem die where-Klauseln oben geben "Eine explizite Konvertierung vorhanden ist, fehlt einem Guss"
Vielleicht wollen Sie sich das Teil ANTWORT für eine Antwort und markieren Sie es als angenommen?

InformationsquelleAutor SQLGrinder | 2013-03-20

Schreibe einen Kommentar