2015-03-16 2 views
1

на мой взгляд У меня есть множественный выбор с некоторым списком имен серверов. Количество серверов будет динамичным и изменяться довольно часто.MVC3 динамическое число проверок в том, где статья

<select name="servers" class="selectpicker" multiple data-live-search="true"> 
    <optgroup label="Prod5"> 
    <option>VS12</option> 
    <option>...</option>     
    </optgroup> 
    <optgroup label="UAT6"> 
    <option>VS13</option> 
    <option>...</option>       
    </optgroup> 
</select> 

В контроллере мне нужно фильтровать дБ против некоторых статического числа KPIKey и против имени сервера (ов) (kpi.KPIserver), который будет выбран пользователем из множественного выбора. Как добавить к приведенному ниже аргументу where динамическое число проверок KPIserver, например.

где kpi.KPIkey == "Использование ЦП" || kpi.KPIkey == "Операции ввода/вывода" & & kpi.KPIserver == "VS12" || kpi.KPIserver == "VS13" || kpi.KPIserver == ...

[HttpPost] 
    public ActionResult Index(FormCollection fs) 
    { 

     IEnumerable<kpi_master> allKPI = null; 

     try 
     {    
      allKPI = from kpi in db.kpi_masters 
        where kpi.KPIkey == "CPU usage" || kpi.KPIkey == "I/O operations"             
        select kpi; 
     } 
     catch (Exception e) { log.Error("KPI POST error: " + e.Message); } 

     return View(allKPI); 

    } 

ответ

1

Если у вас есть определенное количество полей, которые вы проверяете, то это достаточно легко.

var keys = new List<string>() { "CPU usage", "I/O operations" }; 
var servers = new List<string>() { "VS13", "SERVERX" }; 

..... 

allKPI = allKPI = from kpi in db.kpi_masters 
        where keys.Contains(kpi.KPIkey) || servers.Contains(kpi.KPIserver) 
        select kpi; 
+0

Спасибо Эрик. Это то, что мне нужно. – prmvc

0

Использовать методы расширения linq вместо этого, если число предложений является динамическим. Тогда что-то вроде

var result = collection. Where (o => contional clause 1); 
foreach (var extraclause in dynamicClauses) 
{ 
    result = result.Where (o => extraclause (o)); 
} 

Таким образом, вы можете добавить пункты динамически, и запрос будет выполняться только тогда, когда набор (результат) перечисляется. Если вы хотите принудительно выполнить выполнение, немедленно добавьте

var final = result.ToArray(); 
Смежные вопросы