2010-10-05 3 views
2

У меня есть следующий запрос, который я хочу, чтобы отсортировать или отфильтровать с помощью проецируемых имен классов:Динамически сортировка и фильтрация проецируется результатами Entity SQL

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

Я хочу, чтобы динамически заказать этот запрос с использованием ProjectCount или Id колонок таким же как ESQL , как .OrderBy("ProjectCount"). Поскольку результатом запроса является IQueryable вместо ObjectContext, он не работает. Есть ли способ сделать это?

ответ

1

Вы должны быть в состоянии сделать это следующим образом: .OrderBy(p => p.ProjectCount)

1

Посмотрите на библиотеку динамической LINQ.
Это tutorial, который, кажется, описывает ваш случай.

1

Вы можете сделать некоторые отличные вещи с помощью LINQ, если вы знаете, что делать. Может, что-то вроде этого ???

 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); 
Смежные вопросы