2011-01-19 63 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