Многочисленные поля с динамическим linq - PullRequest
0 голосов
/ 19 января 2011

Я делаю страницу 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 голосов
/ 19 января 2011

Попробуйте context.myList.Where(m=>lstObjects.Contains(m.Phase)) или что-то в этом контексте.Если это не то решение, которое вы ищете, пожалуйста, предоставьте больше информации о том, что вы имеете в виду под «Многофазностью»

ae, получает ли пользователь выбор нескольких фаз, или у объекта есть фазы многократного изменения, илиоба?

[edit]

Я не очень знаком с динамическим 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);

Дайте мне знать, если это работает.

[/ edit]

...