ユーザーがフェーズでアイテムをフィルターできるSP2010ページを作成しています(多肢選択フィールドです)。パフォーマンス上の理由とフィルターの性質から、このクエリを作成するにはSystem.Linq.Dynamicを使用する必要がありました。
私は以下を試しました(これは実際のコードではありませんが、私がやっていることを例示しています):
var lstObjects = new List<object>();
var query = "Phase = @0 ";
lstObjects.Add(Phase.Value);
context.myList.Where(query,lstObjects.ToArray());
これは、アイテムに1つのフェーズしかなく、フィルターされているフェーズである場合に機能します。アイテムに複数のフェーズ(フェーズ1と2など)があり、フェーズ1でフィルター処理する場合は、表示する必要があります。多肢選択フィールドをフィルタリングするにはどうすればよいですか?
編集:言及するのを忘れて、オブジェクトのタイプ「Phase.Value」は、SPMetalを使用して生成されたフラグ列挙型です。
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);
これが機能するかどうか教えてください。
[/編集]