2010-10-05 3 views
2

je la requête suivante que je veux trier ou filtrer en utilisant les noms de classes projetées:tri Dynamiquement et filtrage projeté Entity SQL résultats

List<CompanyInfo> list = new List<CompanyInfo>(); 

using (var db = new DbContext()) 
{ 
    list.AddRange(
        db.Companies.Include("Projects") 
        .Select(row => new CompanyInfo() 
        { 
         ProjectCount = (from s in row.Projects 
             where s.Company.fId == row.fId 
             select s.pId).Count(), 
         Id = satir.fId, 
        }) 
       //.OrderBy("ProjectCount") //<== what I want to do 
      ); 
} 

Je veux commander dynamiquement cette requête en utilisant des colonnes ProjectCount ou Id mêmes que ESQL , comme .OrderBy("ProjectCount"). Puisque le résultat de la requête est IQueryable au lieu de ObjectContext, cela ne fonctionne pas. Y a-t-il un moyen de faire cela?

Répondre

1

Vous devriez être en mesure de le faire comme ceci: .OrderBy(p => p.ProjectCount)

1

Jetez un oeil à la bibliothèque dynamique LINQ. Voici un tutorial qui semble décrire votre cas.

1

Vous pouvez faire des choses intéressantes avec LINQ, si vous savez quoi faire. Peut-être quelque chose comme ça ??

 var query = db.Companies.Include("Projects").Select(row => 
      new CompanyInfo() 
      { 
       ProjectCount = (from s in row.Projects where s.Company.fId == row.fId select s.pId).Count(), 
       Id = satir.fId, 
      }); 

     if (orderBy) // orderBy is bool, that tels you what to order by 
      query = query.OrderBy(x => x.ProjectCount); 
     else 
      query = query.OrderBy(x => x.Id); 

     list.AddRange(query);