2011-01-19 67 views
0

我正在做一个SP2010页面,用户可以通过阶段筛选项目(这是一个多选区域)。出于性能原因和过滤器的性质,我不得不求助于System.Linq.Dynamic来进行此查询。Multichoice字段与动态linq

我试过以下(这不是真正的代码,但体现了我在做什么):

var lstObjects = new List<object>(); 
var query = "Phase = @0 "; 
lstObjects.Add(Phase.Value); 

context.myList.Where(query,lstObjects.ToArray()); 

这工作,如果项目只有一个阶段,是被过滤的一个。如果物品有多个阶段(如阶段1和阶段2),并且按阶段1进行过滤,则必须显示。我如何过滤multichoice字段?

编辑:忘了提及,对象“Phase.Value”的类型是使用SPMetal生成的标志枚举。

回答

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

让我知道如果这个作品。

[/编辑]

+0

该对象可以具有多个阶段,但只可以通过一个过滤器。但是查询必须使用动态Linq,因为其他人可以过滤并获得最佳性能。 – jpiolho 2011-01-19 14:32:52