使用Linq的搜索功能问题

时间:2011-11-23 15:27:03

标签: asp.net-mvc linq asp.net-mvc-3 entity-framework

我的产品表中有一个关键字列,关键字列将包含红色,绿色,白色,紫色,黑色等关键字。每个产品都有一个关键字。我想在我的搜索选项中输入一个关键词下拉列表,这样,当选择黑色关键字时,应该显示所有具有关键字黑色的产品,是否可以实现这样的效果,如果是,任何帮助或帮助都将受到高度赞赏??

另外,我想用关键字列填充下拉列表,例如,如果添加了具有不同关键字的新产品,则下拉列表也应该包含该关键字。

目前我正在使用制造商进行搜索,下面是代码: 视图:

@if (Model.AvailableManufacturers.Count > 0)
                            {
                                <tr>
                                    <td class="title">
                                        @Html.LabelFor(model => model.Mid):
                                    </td>
                                    <td class="data">
                                        @Html.DropDownListFor(model => model.Mid, Model.AvailableManufacturers)
                                    </td>
                                </tr>
                            }

控制器:

var manufacturers = _manufacturerService.GetAllManufacturers();
        if (manufacturers.Count > 0)
        {
            model.AvailableManufacturers.Add(new SelectListItem()
            {
                Value = "0",
                Text = _localizationService.GetResource("Common.All")
            });
            foreach (var m in manufacturers)
                model.AvailableManufacturers.Add(new SelectListItem()
                {
                    Value = m.Id.ToString(),
                    Text = m.Name,
                    Selected = model.Mid == m.Id
                });
        }

ManufactureService.cs:

      public virtual IList<Manufacturer> GetAllManufacturers(bool showHidden = false)
    {

            var query = from m in _manufacturerRepository.Table
                        orderby m.DisplayOrder
                        where (showHidden || m.Published) &&
                        !m.Deleted
                        select m;
            var manufacturers = query.ToList();
            return manufacturers;

    }

问题:我应该使用什么Linq Query从表格产品中调用不同的关键字,并在下拉列表中填充。

问题2:用于搜索所选关键字的产品的SQL查询。

我正在使用mvc3 razor和LINQ

1 个答案:

答案 0 :(得分:1)

这应该为您提供一个独特的关键字列表,假设您可以直接引用您的产品表。如果您只能通过制造商参考产品,我们需要对其进行一些修改。

var availableKeywords = productTable.Select(product => product.Keyword).Distinct();

然后,您可以通过ViewData将这些关键字作为选择列表传递给您的视图,如下所示:

ViewData["Keywords"] = new SelectList(availableKeywords);

然后,通过下拉列表使用选定的关键字过滤产品表,您可以执行以下操作吗?:

var matchingProducts = productTable.Where(product => product.Keyword == selectedKeywordFromDropDown);

您只需要确保您的操作方法通过参数或Request对象从下拉列表中访问传入的关键字。