2

我有以下查询,我想使用投影的类名对其进行排序或过滤:

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

我想使用与 ESQL 相同的列ProjectCount或列动态排序此查询,例如. 由于查询结果是 IQueryable 而不是 ObjectContext 它不起作用。有没有办法做到这一点?Id.OrderBy("ProjectCount")

4

4 回答 4

1

你应该可以这样做:.OrderBy(p => p.ProjectCount)

于 2010-10-05T10:42:15.860 回答
1

看看动态 LINQ 库。
这是一个似乎描述您的案例的教程。

于 2010-10-05T10:47:26.163 回答
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);
于 2010-10-05T15:33:56.293 回答
0

感谢您的回复,我使用了辅助扩展方法:

使用字符串作为列名在 IQueryable 中排序

于 2010-10-06T07:28:13.737 回答