如何在我的代码中使用IEnumerable字符串参数?

时间:2016-08-04 14:37:07

标签: c#

作为搜索页面的一部分,我允许用户使用KendoUI Multiselect小部件对特定搜索字词进行多选。集合中的这些项目作为参数传递给我的控制器。我的问题是,在我将它们传递给我的控制器后,我该如何使用它们?更具体地说,我如何在使用Contains方法的Where语句中使用它们。

这是我的多选小部件的代码

@(Html.Kendo().MultiSelect()
  .Name("vessel_type")
  .Placeholder("Select Type")
  .BindTo(new List<string>() {
      "AHTS",
      "PSV",
      "Special"
   }))

这是我的控制器代码,它使用vessel_type作为参数

public ActionResult Search(IEnumerable<string> vessel_type)
    {
        var vessels = (from o in db.vessels
                       select o);
        vessels = vessels.Where(s => s.vessel_type.Contains(vessel_type));
        return PartialView("_results", vessels);
    }

这条线是不正确的,因为它期待一个字符串,但我有一个mroe而不是一个集合:

 vessels = vessels.Where(s => s.vessel_type.Contains(vessel_type));

由于

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,我相信您需要反过来执行检查,即检查vessel_type集合是否包含容器的类型:

vessels = vessels.Where(s => vessel_type.Contains(s.vessel_type));

此处ContainsIEnumerable<T>上的扩展方法。

在旁注中,由于参数代表一个集合,我认为复数名称更合适,例如vessel_types