2011-01-19 27 views
0

フィルタリングとページング用のモジュールを実装したいと思います。私はそれを成功させるために努力し始めたので、私は動的Linqまたは反射を使用しなければならなかったことを理解するが、それは好きではない1対多の関係EFでフィルタリングされるテキストを含むフィールド以来。EFで動的Linqと1対多の関係を持つOrderBy

このコードは正常に動作が..しかし、静的である:

List<Domain.Entities.Action> actions = db.Actions.Include("Menus").Include("ActionDetails") 
               .Where(x => x.ActionDetails.Any(y => y.Language.Culture == _currentCulture)) 
               .OrderBy(y => y.ActionDetails.Select(z => z.Title).Max()).Skip((pager.Index - 1) * pager.Take).Take(pager.Take) 
               .ToList(); 

私は

.Select(Z => z.Title)

ダイナミック..

をしたいです

誰かが私を助けることができます..私はたくさんのことを試みますが、成功はありません

Ju。あなたがのパラメータを渡す必要があり、これを達成するために

+0

を返すに計画している場合、これが働くなるかわかりませんそのEF ..は自分のメソッドのオーバーロードをサポートしていません..それは常にそれは私の拡張機能(オーバーロード)をサポートしていないと言いました。Select ..と文字列パラメータ..(私は関数内に独自のラムダ式を構築します。 )私はSQLを使用する必要があると思う..私のお気に入りの解決策ではありません.. – Julien

答えて

1

Funt<Action, TResultType>searchCriteria

あなたのメソッドのシグネチャが似ていますが、あなたは、私が思うList<string>

public List<string> PerformSearch(Func<Action, string> selectCriteria) 
{ 

    return db.Actions.Include("Menus").Include("ActionDetails") 
     .Where(x => x.ActionDetails.Any(y => y.Language.Culture == _currentCulture)) 
     .OrderBy(y => y.ActionDetails.Select(**selectCriteria**).Max()) 
     .Skip((pager.Index - 1) * pager.Take).Take(pager.Take) 
     .ToList(); 
} 
関連する問題