具有动态linq的Multichoice字段

时间:2011-01-19 10:31:34

标签: c# linq sharepoint-2010 dynamic-linq linq-to-sharepoint

我正在制作一个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生成的标志枚举。

1 个答案:

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

让我知道这是否有效。

[/编辑]