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 和 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 回答