C# 如何在控制器中编写SQL语句以从用户输入(HTML)检索数据并在datatable中执行多重筛选?

C# 如何在控制器中编写SQL语句以从用户输入(HTML)检索数据并在datatable中执行多重筛选?,c#,asp.net-mvc,asp.net-core,highcharts,C#,Asp.net Mvc,Asp.net Core,Highcharts,我需要对数据表中的记录进行多次搜索/筛选,但我不知道如何启动它。我试图编写GetSearchList()函数以获取用户输入(查看html),但出现了错误。我不知道如何修理它们。错误显示: 严重性代码描述项目文件行抑制状态 错误CS0103当前上下文中不存在名称“date”MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\MIMOS\Controllers\HomeController.cs 98 N/A 严重性代码说明项目文件行抑制状态 错误CS010

我需要对数据表中的记录进行多次搜索/筛选,但我不知道如何启动它。我试图编写
GetSearchList()
函数以获取用户输入(查看html),但出现了错误。我不知道如何修理它们。错误显示:

严重性代码描述项目文件行抑制状态
错误CS0103当前上下文中不存在名称“date”MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\MIMOS\Controllers\HomeController.cs 98 N/A
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“Analytical\u id”
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“time\u from”
严重性代码说明项目文件行抑制状态
错误CS0103当前上下文MIMOS C:\Users\aimi.zakaria\source\repos\MIMOS\Controllers\HomeController.cs 98中不存在名称“time\u to”
我的代码应该根据用户输入显示图表。例如,我有date、analysisid、time from、time to和analysis period参数。如果用户选择了这些项目,则输出应显示基于用户输入内容的图表。我的总体想法是从用户输入中检索数据,然后将其传递给控制器;在控制器中执行一些查询,然后像我前面提到的那样显示输出。我看过一些使用AJAX进行过滤记录的教程,但我不知道如何在代码中实现该技术。 输出示例:

型号:
使用Microsoft.AspNetCore.Mvc.Rendering;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
名称空间MIMOS.Models
{
公共类下拉列表
{
公共列表statlist{get;set;}
公共列表分析列表{get;set;}
公共列表搜索列表{get;set;}
}
公共类统计表
{
公共int id{get;set;}
公共int解析_id{get;set;}
公共字符串日期{get;set;}
公共字符串时间{get;set;}
公共字符串计数器{get;set;}
公共int摄像机_id{get;set;}
公共int vehi_1{get;set;}
公共int vehi_2{get;set;}
公共int vehi_3{get;set;}
公共int vehi_4{get;set;}
公共int vehi_5{get;set;}
公共int vehi_6{get;set;}
公共整数总计{get;set;}
公共十进制平均车速{get;set;}
公共十进制平均车辆间距{get;set;}
}
公共类分析列表
{
公共int解析_id{get;set;}
}
公共类搜索列表
{
公共int id{get;set;}
公共int解析_id{get;set;}
公共字符串日期{get;set;}
公共字符串时间{get;set;}
公共字符串计数器{get;set;}
公共int摄像机_id{get;set;}
公共int vehi_1{get;set;}
公共int vehi_2{get;set;}
公共int vehi_3{get;set;}
公共int vehi_4{get;set;}
公共int vehi_5{get;set;}
公共int vehi_6{get;set;}
公共整数总计{get;set;}
公共十进制平均车速{get;set;}
公共十进制平均车辆间距{get;set;}
}
}
家庭控制器:
使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Extensions.Logging;
使用MIMOS模型;
使用Microsoft.Extensions.Configuration;
使用System.IO;
使用MySql.Data.MySqlClient;
使用Microsoft.AspNetCore.Mvc.Rendering;
名称空间MIMOS.Controllers
{
公共类HomeController:控制器
{
专用只读ILogger\u记录器;
公共IConfigurationRoot配置{get;}
公共IConfigurationRootGetConnection()
{
var builder=new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(“appSettings.json”).Build();
返回生成器;
}
/*公共家庭控制器(ILogger记录器)
{
_记录器=记录器;
}*/
公共IActionResult索引()
{
Dropdownlist multi_Dropdownlist=新的Dropdownlist
{
statlist=GetStatistics(),
analyticlist=GetAnalytical(),
//searchlist=GetSearchList()
};
返回视图(多下拉列表);
}
公共列表GetSearchList()
{
var connection=GetConnection().GetSection(“ConnectionStrings”).GetSection(“DefaultConnection”).Value;
MySqlConnection con=新的MySqlConnection(连接);

MySqlCommand cmd=new MySqlCommand(“从统计数据中选择时间,其中日期=”+“日期+”,分析id=“+分析id+”和时间>=”+“时间从+"“还有时间如果你能够创建HTML表,这里有一个演示,可以帮助你在Highcharts中实现HTML表。@SebastianWędzel我已经成功地在highchart中实现了HTML表。现在我需要根据分析id、时间等来过滤数据表。这部分对我来说有点困难,因为我不知道如何操作。不要从用户输入生成sql字符串。始终绑定参数。@JeremyLakeman我可以知道如何绑定参数吗?对不起,我对这一点有点陌生,所以我的知识有点有限。
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MIMOS.Models
{
    public class Dropdownlist
    {

        public List<Statistic_list> statlist { get; set; }
        public List<Analytic_list> analyticlist { get; set; }
        public List<Search_list> searchlist { get; set; }

}


public class Statistic_list
{
    public int id { get; set; }
    public int analytic_id { get; set; }
    public string date { get; set; }
    public string time { get; set; }
    public string counter { get; set; }
    public int camera_id { get; set; }
    public int vehi_1 { get; set; }
    public int vehi_2 { get; set; }
    public int vehi_3 { get; set; }
    public int vehi_4 { get; set; }
    public int vehi_5 { get; set; }
    public int vehi_6 { get; set; }
    public int total_vehicle { get; set; }
    public decimal avg_vehicle_speed { get; set; }
    public decimal avg_vehicle_gap { get; set; }
}
public class Analytic_list
{
    public int analytic_id { get; set; }

}

public class Search_list
{
    public int id { get; set; }
    public int analytic_id { get; set; }
    public string date { get; set; }
    public string time { get; set; }
    public string counter { get; set; }
    public int camera_id { get; set; }
    public int vehi_1 { get; set; }
    public int vehi_2 { get; set; }
    public int vehi_3 { get; set; }
    public int vehi_4 { get; set; }
    public int vehi_5 { get; set; }
    public int vehi_6 { get; set; }
    public int total_vehicle { get; set; }
    public decimal avg_vehicle_speed { get; set; }
    public decimal avg_vehicle_gap { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MIMOS.Models;
using Microsoft.Extensions.Configuration;
using System.IO;
using MySql.Data.MySqlClient;
using Microsoft.AspNetCore.Mvc.Rendering;

namespace MIMOS.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        public IConfigurationRoot Configuration { get; }
        public IConfigurationRoot GetConnection()

        {

            var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appSettings.json").Build();

            return builder;

        }
        /*public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }*/

        public IActionResult Index()
        {
            Dropdownlist multi_Dropdownlist = new Dropdownlist
            {
                statlist = GetStatistics(),

                analyticlist = GetAnalytic(),

                //searchlist = GetSearchList()


            };
            return View(multi_Dropdownlist);

        }


        public List<Search_list> GetSearchList()

        {

            var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;

            MySqlConnection con = new MySqlConnection(connection);

            MySqlCommand cmd = new MySqlCommand("SELECT time FROM statistics WHERE date = '" + date + "' and analytic_id =" + analytic_id + " and time>='" + time_from + "' and time<'" + time_to + "'; ", con);

            con.Open();
            var reader = cmd.ExecuteReader();


            List<Search_list> searchlist = new List<Search_list>();

            if (reader.HasRows)

            {

                while (reader.Read())

                {

                    searchlist.Add(new Search_list()

                    {
                        vehi_1 = Convert.ToInt32(reader["vehi_1"]),
                        date = reader["date"].ToString(),
                        time = reader["time"].ToString(),
                        analytic_id = Convert.ToInt32(reader["analytic_id"]),
                        vehi_2 = Convert.ToInt32(reader["vehi_2"]),
                        vehi_3 = Convert.ToInt32(reader["vehi_3"]),
                        vehi_4 = Convert.ToInt32(reader["vehi_4"]),
                        vehi_5 = Convert.ToInt32(reader["vehi_5"]),
                        vehi_6 = Convert.ToInt32(reader["vehi_6"]),
                        total_vehicle = Convert.ToInt32(reader["total_vehicle"]),
                        avg_vehicle_speed = Convert.ToDecimal(reader["avg_vehicle_speed"]),
                        avg_vehicle_gap = Convert.ToDecimal(reader["avg_vehicle_gap"])


                    });

                }

            }

            con.Close();

            return searchlist;

        }
    
        public List<Statistic_list> GetStatistics()

        {

            var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;

            MySqlConnection con = new MySqlConnection(connection);

            MySqlCommand cmd = new MySqlCommand("Select * from statistics", con);

            con.Open();

            var reader = cmd.ExecuteReader();

            List<Statistic_list> list = new List<Statistic_list>();

            if (reader.HasRows)

            {

                while (reader.Read())

                {
                    list.Add(new Statistic_list()

                    {
                        time = reader["time"].ToString(),
                        vehi_1 = Convert.ToInt32(reader["vehi_1"]),
                        vehi_2 = Convert.ToInt32(reader["vehi_2"]),
                        vehi_3 = Convert.ToInt32(reader["vehi_3"]),
                        vehi_4 = Convert.ToInt32(reader["vehi_4"]),
                        vehi_5 = Convert.ToInt32(reader["vehi_5"]),
                        vehi_6 = Convert.ToInt32(reader["vehi_6"]),
                        total_vehicle = Convert.ToInt32(reader["total_vehicle"]),
                        avg_vehicle_speed = Convert.ToDecimal(reader["avg_vehicle_speed"]),
                        avg_vehicle_gap = Convert.ToDecimal(reader["avg_vehicle_gap"])

                    });

                }

            }

            con.Close();

            return list;

        }

        public List<Analytic_list> GetAnalytic()

        {

            var connection = GetConnection().GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;

            MySqlConnection con = new MySqlConnection(connection);

            MySqlCommand cmd = new MySqlCommand("Select distinct analytic_id from statistics;", con);

            con.Open();

            var reader = cmd.ExecuteReader();

            List<Analytic_list> list = new List<Analytic_list>();

            if (reader.HasRows)

            {

                while (reader.Read())

                {
                    list.Add(new Analytic_list()

                    {
                        analytic_id = Convert.ToInt32(reader["analytic_id"])

                    });

                }

            }

            con.Close();

            return list;

        }

       

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
<p style="font-family:verdana;text-align:center;"><b>Report Parameter</b></p><hr>
<form class="form-inline" action="Index" method="get">
    <div class="form-group">
        <label for="date">Date:</label>
        <input type="date" class="form-control" id="date" placeholder="Select date" name="date">
    </div> &nbsp;&nbsp;
    <div class="form-group">
        <label for="analytic_id">Analytics ID:</label>
        @Html.DropDownListFor(model => model.analyticlist, new SelectList(Model.analyticlist, "analytic_id", "analytic_id"))
    </div> &nbsp;&nbsp;
     <div class="form-group">
        <label for="time_from">Time From:</label>
        <select name="time_from" class="form-control" id="time_from">
            <option value="0000">12.00 am</option>
            <option value="0030">12.30 am</option>
            <option value="0100">1.00 am</option>
            <option value="0130">1.30 am</option>
            <option value="0200">2.00 am</option>
            <option value="0230">2.30 am</option>
            <option value="0300">3.00 am</option>
            <option value="0330">3.30 am</option>
            <option value="0400">4.00 am</option>
            <option value="0430">4.30 am</option>
            <option value="0500">5.00 am</option>
            <option value="0530">5.30 am</option>
            <option value="0600">6.00 am</option>
            <option value="0630">6.30 am</option>
            <option value="0700">7.00 am</option>
            <option value="0730">7.30 am</option>
            <option value="0800">8.00 am</option>
            <option value="0830">8.30 am</option>
            <option value="0900">9.00 am</option>
            <option value="0930">9.30 am</option>
            <option value="1000">10.00 am</option>
            <option value="1030">10.30 am</option>
            <option value="1100">11.00 am</option>
            <option value="1130">11.30 am</option>
            <option value="1200">12.00 pm</option>
            <option value="1230">12.30 pm</option>
            <option value="1300">1.00 pm</option>
            <option value="1330">1.30 pm</option>
            <option value="1400">2.00 pm</option>
            <option value="1430">2.30 pm</option>
            <option value="1500">3.00 pm</option>
            <option value="1530">3.30 pm</option>
            <option value="1600">4.00 pm</option>
            <option value="1630">4.30 pm</option>
            <option value="1700">5.00 pm</option>
            <option value="1730">5.30 pm</option>
            <option value="1800">6.00 pm</option>
            <option value="1830">6.30 pm</option>
            <option value="1900">7.00 pm</option>
            <option value="1930">7.30 pm</option>
            <option value="2000">8.00 pm</option>
            <option value="2030">8.30 pm</option>
            <option value="2100">9.00 pm</option>
            <option value="2130">9.30 pm</option>
            <option value="2200">10.00 pm</option>
            <option value="2230">10.30 pm</option>
            <option value="2300">11.00 pm</option>
            <option value="2330">11.30 pm</option>
        </select>
    </div> &nbsp;&nbsp;
     <div class="form-group">
         <label for="time_to">Time To:</label>
         <select name="time_to" class="form-control" id="time_to">
             <option value="0000">12.00 am</option>
             <option value="0030">12.30 am</option>
             <option value="0100">1.00 am</option>
             <option value="0130">1.30 am</option>
             <option value="0200">2.00 am</option>
             <option value="0230">2.30 am</option>
             <option value="0300">3.00 am</option>
             <option value="0330">3.30 am</option>
             <option value="0400">4.00 am</option>
             <option value="0430">4.30 am</option>
             <option value="0500">5.00 am</option>
             <option value="0530">5.30 am</option>
             <option value="0600">6.00 am</option>
             <option value="0630">6.30 am</option>
             <option value="0700">7.00 am</option>
             <option value="0730">7.30 am</option>
             <option value="0800">8.00 am</option>
             <option value="0830">8.30 am</option>
             <option value="0900">9.00 am</option>
             <option value="0930">9.30 am</option>
             <option value="1000">10.00 am</option>
             <option value="1030">10.30 am</option>
             <option value="1100">11.00 am</option>
             <option value="1130">11.30 am</option>
             <option value="1200">12.00 pm</option>
             <option value="1230">12.30 pm</option>
             <option value="1300">1.00 pm</option>
             <option value="1330">1.30 pm</option>
             <option value="1400">2.00 pm</option>
             <option value="1430">2.30 pm</option>
             <option value="1500">3.00 pm</option>
             <option value="1530">3.30 pm</option>
             <option value="1600">4.00 pm</option>
             <option value="1630">4.30 pm</option>
             <option value="1700">5.00 pm</option>
             <option value="1730">5.30 pm</option>
             <option value="1800">6.00 pm</option>
             <option value="1830">6.30 pm</option>
             <option value="1900">7.00 pm</option>
             <option value="1930">7.30 pm</option>
             <option value="2000">8.00 pm</option>
             <option value="2030">8.30 pm</option>
             <option value="2100">9.00 pm</option>
             <option value="2130">9.30 pm</option>
             <option value="2200">10.00 pm</option>
             <option value="2230">10.30 pm</option>
             <option value="2300">11.00 pm</option>
             <option value="2330">11.30 pm</option>
         </select>
     </div>&nbsp;&nbsp;
        <div class="form-group">
        <label for="analysis_period" id="analysis_period">Analysis Period:</label>
        <select name="analysis_period" class="form-control">
            <option value="five_min">5 mins</option>
            <option value="half_hour">30 mins</option>
            <option value="one_hour">1 hours</option>
        </select>
    </div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     <button type="submit" class="btn btn-default" id="search"><i class='fas fa-search' style='color:black'></i></button><br><br>
</form>
@model MIMOS.Models.Dropdownlist

<body>
    <div class="row">
        <div class="column" style="background-color: #ffffff;">
            <figure class="highcharts-figure">
                <div id="container_one"></div>
                <script src="~/js/chart_one.js"></script>

                <table id="datatable_one" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>C1</th>
                        <th>C2</th>
                        <th>C3</th>
                        <th>C4</th>
                        <th>C5</th>
                        <th>C6</th>
                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
        <div class="column" style="background-color:#ffffff;">
            <div id="container"></div>
            <script src="~/js/chart_one.js"></script>
            <figure class="highcharts-figure">
                <table id="datatable" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>C1</th>
                        <th>C2</th>
                        <th>C3</th>
                        <th>C4</th>
                        <th>C5</th>
                        <th>C6</th>
                        <th>Total Vehicle</th>
                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
    </div>
    <div class="row">
        <div class="column" style="background-color:#ffffff;">
            <div id="container_two"></div>
            <script src="~/js/chart_two.js"></script>
            <figure class="highcharts-figure">
                <table id="datatable_two" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>Average Speed</th>

                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.avg_vehicle_speed)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
        <div class="column" style="background-color:#ffffff;">
            <div id="container_two"></div>
            <script src="~/js/chart_two.js"></script>
            <figure class="highcharts-figure">
                <table id="datatable_two" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>C1</th>
                        <th>C2</th>
                        <th>C3</th>
                        <th>C4</th>
                        <th>C5</th>
                        <th>C6</th>
                        <th>Total Vehicle</th>
                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
    </div>
    <div class="row">
        <div class="column" style="background-color: #ffffff;">
            <figure class="highcharts-figure">
                <div id="container_three"></div>
                <script src="~/js/chart_three.js"></script>

                <table id="datatable_three" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>Gap</th>
                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.avg_vehicle_gap)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
        <div class="column" style="background-color:#ffffff;">
            <div id="container_two"></div>
            <script src="~/js/chart_two.js"></script>
            <figure class="highcharts-figure">
                <table id="datatable_two" style="display:none">
                    <tr>
                        <th>Time</th>
                        <th>C1</th>
                        <th>C2</th>
                        <th>C3</th>
                        <th>C4</th>
                        <th>C5</th>
                        <th>C6</th>
                        <th>Total Vehicle</th>
                    </tr>
                    @foreach (var item in Model.statlist)
                    {
                        <tr>
                            <td>@Html.DisplayTextFor(modelItem => item.time)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_1)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_2)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_3)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_4)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_5)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.vehi_6)</td>
                            <td>@Html.DisplayTextFor(modelItem => item.total_vehicle)</td>
                        </tr>
                    }
                </table>
            </figure>
        </div>
    </div>
</body>
</html>