SQL - 以逗号分割查询结果,以便排序到下拉列表

时间:2016-03-03 16:05:22

标签: c# sql-server asp.net-mvc

我正在开发一个C#.NET MVC 5项目,以熟悉MVC,而我无法决定从表表中获取查询结果并将其拆分为逗号的投注解决方案。

我有一个名为“游戏”的表,其中有一个名为“平台”的列。此列包含以逗号分隔的值,因为游戏几乎总是针对当前的多个平台制作。我想获取平台列的内容并将其放入表单中的下拉字段,以允许用户按平台搜索游戏。但我不确定分割查询结果的最佳方法,因此下拉列表中没有逗号分隔的值。

下面的函数是我现在在GamesController文件中设置的东西:

public ActionResult Index(string gamePlatform, string searchString)
{
    var PlatformLst = new List<string>();

    var PlatformQry = from d in db.Games
                   orderby d.Platform
                   select d.Platform;

    PlatformLst.AddRange(PlatformQry.Distinct());
    ViewBag.gamePlatform = new SelectList(PlatformLst);

    var games = from g in db.Games
                 select g;

    if (!String.IsNullOrEmpty(searchString))
    {
        games = games.Where(s => s.Title.Contains(searchString));
    }

    if (!string.IsNullOrEmpty(gamePlatform))
    {
        games = games.Where(x => x.Platform == gamePlatform);
    }

    return View(games);
}

这是带有搜索下拉列表的表单(位于Index.cshtml中):

@using (Html.BeginForm())
{
<p>
    Title: @Html.TextBox("SearchString") <br />
    Platform: @Html.DropDownList("gamePlatform", "All")
    <input type="submit" value="Filter" />
</p>
}

这样可行,但下拉字段最终会被填充:

  • Microsoft Windows,OS X,Linux,PlayStation 4
  • Microsoft Windows,OS X,Xbox One
  • Microsoft Windows,OS X,PlayStation 3,PlayStation 4,Xbox 360,Xbox 一个
  • Microsoft Windows,Android,Xbox One
  • 依旧......

等等。这不是我希望“按平台搜索”功能的工作方式。我宁愿让它成为下拉字段的一个平台:

  • Microsoft Windows
  • OS X
  • 的Linux
  • PlayStation 3
  • PlayStation 4
  • Xbox 360
  • Xbox One
  • 等......

我知道我可以创建函数或存储过程,或者我可以设置一个返回XML的函数。但我不确定哪种情况最适合这种情况。

1 个答案:

答案 0 :(得分:0)

简单的方法是拥有一个在Platforms数据库表中预留的所有平台的完整列表或类似的东西。然而,使用你拥有的东西,你必须循环并将它们全部分开,然后在最后做一个明显的。

foreach (var platformString in PlatformQry)
{
    foreach (var platform in platformString .Split(','))
        PlatformList.Add(platform);
}
PlatformLst.Distinct();