2010-11-11 6 views
-1

Je le code suivant:ASP.NET MVC2 simple Linq Question

 public ActionResult ViewCategory(string categoryName, string searchCriteria = "Price") 
    { 
     // Retrieve Category and its associated Listings from the database 
     var categoryModel = db.Categories.Include("Listings") 
      .Single(c => c.Title == categoryName); 

     var viewModel = new ClassifiedsBrowseViewModel 
     { 
      Category = categoryModel, 
      Listings = categoryModel.Listings.ToList() 
     }; 

     return View(viewModel); 
    } 

Ce code renvoie quelques annonces d'une catégorie donnée. Mais je veux réorganiser ces résultats de recherche en fonction de certains critères. PAR EXEMPLE. Prix ​​...

Merci beaucoup, J

+0

Pourquoi auriez-vous besoin de faire un GroupBy lorsque vous choisissez une seule ligne de toute façon? –

+0

Qu'est-ce que vous essayez de grouper par? Pourquoi incluez-vous des listes? Est-ce que cette partie de votre groupe est liée ou non? –

+0

Désolé j'ai mis à jour ma question pour ajouter le code complet, fondamentalement j'ai un site classé. J'ai différentes catégories et dans ces catégories j'ai des listes, cette page récupère simplement les listes pour cette catégorie spécifique ... mais comment puis-je changer l'ordre de ces listes? – JHarley1

Répondre

1

Vous voulez utiliser OrderBy() ou OrderByDescending() selon les besoins.

Par exemple la commande par prix le plus élevé -

var viewModel = new ClassifiedsBrowseViewModel 
     { 
      Category = categoryModel, 
      Listings = categoryModel.Listings.OrderByDescending(c=>c.Price).ToList() 
     }; 
+0

Bonjour, Merci pour le conseil upthecreek et abus de langage. Comment effectuer une recherche par le contenu de la chaîne de critères de recherche? – JHarley1

+0

J'ai peur de ne pas comprendre complètement ... mais si vous voulez dire ordre par dynamiquement par valeur de chaîne -http: //stackoverflow.com/questions/41244/dynamic-linq-orderby – Vishal

+0

Utilisez une déclaration de commutateur, tester pour chaque chaîne que vous êtes attendre, effectuer une requête différente dans chaque cas ... http://msdn.microsoft.com/en-us/library/06tc147t(VS.80).aspx – UpTheCreek

1
Listings = categoryModel.Listings.OrderBy(x => x.Price).ToList(); 
0

Une autre option qui pourrait fonctionner, selon la façon dont vous présentez les informations: utiliser quelque chose comme le plugin tablesorter jquery et trier les résultats du côté client.

Évidemment, cela ne fonctionnera pas s'il y a beaucoup de résultats, et vous faites la pagination, mais pour une seule page de résultats, présentée dans une table, cela fonctionne très bien.

0

Une autre façon d'écrire le Linq est d'utiliser le langage de requête:

Listings = from item in categoryModel.Listings 
      orderby item.Price 
      select item;