Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq MVC3 where子句中的动态签入数_Linq_Asp.net Mvc 3_Multiple Conditions - Fatal编程技术网

Linq MVC3 where子句中的动态签入数

Linq MVC3 where子句中的动态签入数,linq,asp.net-mvc-3,multiple-conditions,Linq,Asp.net Mvc 3,Multiple Conditions,在我看来,我有一个多重选择,其中包含一些服务器名称列表。服务器的数量将是动态的,并且变化非常频繁 <select name="servers" class="selectpicker" multiple data-live-search="true"> <optgroup label="Prod5"> <option>VS12</option> <option>...</option>

在我看来,我有一个多重选择,其中包含一些服务器名称列表。服务器的数量将是动态的,并且变化非常频繁

<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>

VS12
...                
VS13
...                        
在控制器中,我需要根据一些静态的KPIKey数和服务器名称(kpi.KPIserver)对数据库进行过滤,这些名称将由用户从多个select中选择。如何在下面的where子句中添加动态数量的KPIserver检查,例如

其中kpi.KPIkey==“CPU使用率”| kpi.KPIkey==“I/O操作”&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);

    }
[HttpPost]
公共行动结果索引(FormCollection fs)
{
IEnumerable allKPI=null;
尝试
{               
allKPI=来自db.kpi\u masters中的kpi
其中kpi.KPIkey==“CPU使用率”| kpi.KPIkey==“I/O操作”
选择关键绩效指标;
}
捕获(异常e){log.Error(“KPI POST错误:+e.Message);}
返回视图(所有KPI);
}

如果要检查的字段数设置好了,那么就很容易了

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;
var keys=newlist(){“CPU使用”、“I/O操作”};
var servers=newlist(){“VS13”,“SERVERX”};
.....
allKPI=allKPI=来自db.kpi\u masters中的kpi
其中keys.Contains(kpi.KPIkey)| | servers.Contains(kpi.KPIserver)
选择关键绩效指标;

如果子句的数量是动态的,则使用linq扩展方法。 然后像

var result = collection. Where (o => contional clause 1);
foreach (var extraclause in dynamicClauses)
{
    result = result.Where (o => extraclause (o));
}
因此,您可以动态添加子句,并且查询将仅在枚举集合(结果)时执行。如果要立即强制执行,请添加

var final = result.ToArray ();

谢谢你,埃里克。这就是我需要的。