我正在制作一个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生成的标志枚举。
答案 0 :(得分:0)
在该上下文中尝试context.myList.Where(m=>lstObjects.Contains(m.Phase))
或其他内容。
如果这不是您正在寻找的解决方案,请提供更多有关“多阶段”
a.e,用户是选择多个阶段还是对象具有多个阶段,或两者都有?
[编辑]
我对动态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);
让我知道这是否有效。
[/编辑]