2017-12-14 11 views
0

メソッドに新しいパラメータを追加できず、DataQueryのロジックを変更できない状況にあります。このため、これと同様の構造でメソッドの内容を変更することしかできません、およびT.linqのwhere節を傍受してオーバーライドします

IEnumerable<T> Get<T>(DataQuery<T> query) { 
    var collection = repo; 
    return query.Apply(repo).ToList(); 
} 

の性質は、私の問題は、私は私のチームに割り当てられたTsのを取得するためのサポートを追加したいということですか、私の会社またはちょうど私が、私は「私のいずれかのコンテキストへのアクセスを持っていません"をコールポイントから取得します。これらは、メソッドのUserContextで使用できます。

DataQuery<T>.Apply()は、T.caseId <= 4のようなTsプロパティをクエリでき、ケース1〜4のリストを返します。 source.Where(t => t.caseId <= 4)

私の考えに翻訳されているが.Where(t => t.IsMineQuery == true)または.Where(t => t.IsMyTeamQuery == true)に呼び出しインターセプト

bool IsMineQuery 
bool IsMyTeamQuery 
bool IsMyCompanyQuery 

、その後をTと.Where(t => t.UserId == UserContext.UserId)または.Where(t => UserContext.TeamIds.Contains(t.TeamId))にそれらを書き換えるために、次のフィールドを追加することですが、私はどのようにの見当がつかない呼び出しを傍受する。

どうすればよいですか?

+0

私はあなたの質問を完全に理解していないかもしれませんが、 'isMineQuery {get UserId == UserContext.UserId}' 'が十分ですか? – Heinzi

+0

@Heinziいいえ、 'UserContext'は' IsMyQuery'ゲッターの中で利用できません。 – dasblinkenlight

+1

'DataQuery 'とは何ですか?あなたはそれを支配していますか?どのように構築し、クエリを行うのですか? –

答えて

0

だから、一晩中騒ぐと、私は突破しました。

私は、カスタムクエリプロバイダをしなければならなかった - 私はこのチュートリアルを使用:https://msdn.microsoft.com/en-us/library/bb546158.aspx

その後、私のコントローラは、フォームの

IEnumerable<T> Get<T>(DataQuery<T> query) { 
    var collection = new MyQueryable(repo, UserContext); 
    return query.Apply(repo).ToList(); 
} 

ですその後、私は私のかどうかを確認するために、チュートリアルの「InnerMostWhereFinder」を変更しましたクエリはIsMineQueryまたはIsMyTeamQueryを取得し、それをUserContext.TeamIds.Contain(x => x.Team.Id)に置き換えます 魅力的に機能しますが、単純な解決策ではありませんでした。

関連する問題