2011-01-19 5 views
0

私は、ユーザーがフェーズで項目をフィルタリングできるSP2010ページを作成しています(マルチチェックフィールドです)。パフォーマンス上の理由、およびこのクエリを行うためにSystem.Linq.Dynamicに頼らざるを得なかったフィルターの性質上、ダイナミックlinqを使用したマルチチョイスフィールド

私は(これは実際のコードではなく、私がやっている例示)以下のことを試してみた:

var lstObjects = new List<object>(); 
var query = "Phase = @0 "; 
lstObjects.Add(Phase.Value); 

context.myList.Where(query,lstObjects.ToArray()); 

項目は一つだけ位相を持って、濾過されたものであればこれは動作します。アイテムに複数のフェーズ(フェーズ1と2など)があり、フェーズ1でフィルタする場合は、それが表示されている必要があります。マルチチェックフィールドはどのようにフィルタリングできますか?

編集:言い換えれば、オブジェクト "Phase.Value"のタイプは、SPMetalを使用して生成されたフラグ列挙型です。

答えて

0

context.myList.Where(m=>lstObjects.Contains(m.Phase))またはその文脈で試してみてください。 これが解決策でない場合は、「マルチフェーズ」の意味に関する詳細情報を提供してください

ae、ユーザーは複数のフェーズを選択できますか、または複数のフェーズを選択できますか、 ?

[編集]

私は、動的LINQと本物慣れていないが、私はこれが解決策になる可能性が想定しています

var lstObjects = new List<object>(); 
var query = "Phase == {0}"; 
lstObjects.Add(Phase.Value); 
for (int i = 1; i < Phase.Count; i++) 
{ 
    query += string.Format(" || Phase == {0}", i); 
} 

context.myList.Where(query,lstObjects.ToList()); 

または

for (int i = 0; i < Phase.Count; i++) 
{ 
    if (i > 0) { query+= " || "; } 
    query += string.Format("Phase == {0}", lstObjects[i].Value); 
} 
context.MyList.Where(query); 

これが動作するかどうか、私に教えてください。

+0

オブジェクトは複数のフェーズを持つことができますが、1つのみでフィルタリングできます。しかし、他の人がフィルタリングして最良のパフォーマンスを得るために、クエリは動的なLinqでなければなりません。 – jpiolho

+0

私はあなたを完全に理解しているとは言えません。 mオブジェクト(私の例では)は複数のフェーズを持っていますか?またはlstObjectsに複数のフェーズがあるか、その両方ですか? –

関連する問題