我正在制作一个SP2010页面,用户可以在其中按阶段过滤项目(这是一个选择项)。由于性能原因和筛选器的性质,我不得不求助于System.Linq.Dynamic进行此查询。
我已经尝试了以下方法(这不是真正的代码,但可以例证我在做什么):
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生成的标志枚举。
请尝试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);
让我知道这个是否奏效。
[/编辑]