2016-04-15 6 views
1

В моем представлении() у меня есть много флажков с attr name = "types". В моем ActionResult у меня есть тип List, такой как параметр, и я делаю цикл foreach для поиска в List, каждый идентификатор типа и добавляет фильтр Where() в мое выражение LINQ. Если я выберу много типов, возврат - это только один результат и не все, что я выбрал. Посмотрите:LINQ выражение внутри цикла foreach

[HttpPost] 
public ActionResult Index(List<int> types) { 
    var variable = from s in MyViewModel select s; 

    foreach(var type in types) { 
    variable = variable.Where(x => x.TypesId == type); 
    } 

    return View(MyViewModel); 
} 

Есть ли другой способ сделать это?

спасибо !!

+0

Так что вы ищете тип == 1 OR Type == 2? – Rob

ответ

2
variable = variable.Where(x => types.Contains(x.TypesId)); 

Это должно дать вам все значения, если вы хотите только один, добавить .FirstOrDefault() в конце

+0

Спасибо !!!!!!!!!! –

+0

Если это помогло, примите ответ PLS. благодаря –

0

делает имя атра от имени = «типов» с именем = «тип []»

и разместит массив выбранных значений

1

Есть несколько проблем в вашем коде, независимо от того, что другие частей кода, ваш оператор возврата всегда возвращает всю коллекцию MyViewModel.

Другая проблема заключается в том, что ваш код переписывается variable внутри цикла.

Я думаю, это то, что вам нужно.

return View(MyViewModel.Select(s=> types.Any(t=>t.type == s.TypesId)); 
+0

@FabricioOliveria вы попробовали такой подход? –

0

variable в настоящее время сбрасываются каждый foreach итерации. Создайте List и добавьте к нему в foreach блок.

Смежные вопросы