2011-01-19 2 views
0

Я создаю страницу SP2010, где пользователь может фильтровать элементы по своей фазе (это поле многоканального). По соображениям производительности и характеру фильтров мне пришлось прибегнуть к System.Linq.Dynamic, чтобы сделать этот запрос.Поле многоканальных данных с динамическим linq

Я попробовал следующее (это не реальный код, но иллюстрирует то, что я делаю):

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

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

Это работает, если элемент имеет только один этап и является один фильтруется. Если элемент имеет несколько фаз (например, Фаза 1 и 2), и я фильтрую по Фазе 1, он должен показать. Как фильтровать поля многозадачности?

EDIT: Вспомним, что тип объекта «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

+0

Не могу сказать, что я полностью тебя понимаю. Имеет ли объект m (в моем примере) несколько фаз или lstObjects имеют несколько фаз или оба? –