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

ProjectCountのように、またはIdESQL と同じ列を使用して、このクエリを動的に並べ替えたいと考えています.OrderBy("ProjectCount")。クエリ結果は ObjectContext ではなく IQueryable であるため、機能しません。これを行う方法はありますか?

4

4 に答える 4

1

DynamicLINQライブラリを見てください。
これがあなたのケースを説明しているように見えるチュートリアルです。

于 2010-10-05T10:47:26.163 に答える
1

次のようにできるはずです。.OrderBy(p => p.ProjectCount)

于 2010-10-05T10:42:15.860 に答える
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 に答える