0

ユーザーがフェーズでアイテムをフィルターできる 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 を使用して生成されたフラグ列挙型です。

4

1 に答える 1

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

これがうまくいくかどうか教えてください。

[/編集]

于 2011-01-19T13:28:36.230 に答える