Многочисленные поля с динамическим linq
Я делаю страницу 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 ответ
Пытаться context.myList.Where(m=>lstObjects.Contains(m.Phase))
или что-то в этом контексте. Если это не то решение, которое вы ищете, пожалуйста, предоставьте больше информации о том, что вы имеете в виду под "Multi Phases"
ае, пользователь может выбрать несколько фаз, или у объекта есть несколько фаз, или оба?
[редактировать]
Я не очень знаком с динамическим 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);
Дайте мне знать, если это работает.
[/редактировать]