2011-08-21 4 views
2

J'essaie de configurer une requête comme celle-ci. Donc au début je sélectionne des objets complets ..Réduire la requête LINQ à une colonne

var values = (from p in Products 
       where p.LockedSince == null 
       select p); 

Ensuite, le cas échéant j'ajoute where « s

if(SupplierId > 0) 
    values = values.Where(p => p.SupplierId == SupplierId); 

supplémentaires Et à la fin, je ne ai pas besoin les objets produits complets plus , j'ai juste besoin d'une simple liste distincte et ordonnée d'une colonne (p.LocationName) .. quelque chose comme ceci:

values = values.Select(p.LocationName).Distinct().OrderBy(x => x); 

J'ai essayé quelque chose comme Select(loc => new { p.LocationName }), mais sans lu ck.

Répondre

3

Si vous n'avez pas besoin des résultats intermédiaires de façon plus efficace serait d'écrire seule requête

var values = (from p in Products 
       where (p.LockedSince == null && (SupplierId <=0 || p.SupplierId == SupplierId)) 
       select p.LocationName).Distinct().OrderBy(x => x); 
+0

Il m'a fallu une minute avant de comprendre pleinement comment lire, mais maintenant t semble logique, et il s'intègre parfaitement dans mon application. Merci! – Tys

2
values = values.Select(p => p.LocationName).Distinct().OrderBy(x => x); 
Questions connexes