Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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
C# 如何使用实体框架和ASP.NET选择具有多列的查询并将其放入变量中?_C#_Asp.net_Asp.net Mvc_Entity Framework_Linq - Fatal编程技术网

C# 如何使用实体框架和ASP.NET选择具有多列的查询并将其放入变量中?

C# 如何使用实体框架和ASP.NET选择具有多列的查询并将其放入变量中?,c#,asp.net,asp.net-mvc,entity-framework,linq,C#,Asp.net,Asp.net Mvc,Entity Framework,Linq,我使用实体框架模型将我的应用程序连接到数据库,并为CRUD操作生成控制器和视图 但是现在,我需要执行这个查询: select preco_hora, hora_adicional from dbo.Precos where dt_ini_vgcia <= '05/08/2016' and dt_fim_vgcia >= '05/08/2016' 选择preco\u hora,hora\u adicional 来自dbo.Precos 其中dt_ini_vgcia='2016年8

我使用实体框架模型将我的应用程序连接到数据库,并为CRUD操作生成控制器和视图

但是现在,我需要执行这个查询:

select preco_hora, hora_adicional
from dbo.Precos
where dt_ini_vgcia <= '05/08/2016'
and   dt_fim_vgcia >= '05/08/2016'
选择preco\u hora,hora\u adicional
来自dbo.Precos
其中dt_ini_vgcia='2016年8月5日'
并将这两列(preco_hora和hora_adicional)的返回值放入一个变量(或一个对象,任何我可以管理的东西)中

所以,我在这件简单的事情上遇到了一些麻烦。。。无法使代码正常工作。它可以编译,但不工作

我试过这样的方法:

//get the context of the table from the database
private EstacionamentoContext db = new EstacionamentoContext();

string hentrada = "05/08/2016";

        var results = db.Precos.SqlQuery(
            "select preco_hora, hora_adicional " +
            "from db.Precos " +
            "where dt_ini_vgcia <= @p0 " +
            "and dt_fim_vgcia >= @p0", hentrada
            );
    return Content("Resultado: = {0}", results.ToString());
//从数据库获取表的上下文
私有EstacionamentoContext db=新的EstacionamentoContext();
string hentrada=“2016年8月5日”;
var results=db.Precos.SqlQuery(
“选择preco_hora,hora_adicional”+
“来自db.Precos”+
“其中dt_ini_vgcia=@p0”,亨特拉达
);
返回内容(“Resultado:={0}”,results.ToString());
但是我没有得到“results”变量的任何值。我试图调试以查看“results”是否得到一些值,但在尝试查看变量内部时出错

那么,我该如何解决这个问题呢?如何创建一个可以接收此返回的对象(或变量)

使用解决方案进行编辑:

代码被更改,LINQ被用来获得更好的代码。感谢@Jaya和@Jeric Cruz对代码的所有帮助

最后的代码是:

var hentrada = DateTime.Parse("05/08/2016");

            var results = db.Precos.Where(p => p.dt_ini_vgcia <= hentrada
            && p.dt_fim_vgcia >= hentrada).Select(p => new { p.preco_hora, p.hora_adicional }).FirstOrDefault();

            if (results == null)
            {
                return Content("Não há preço registrado para este período de vigência");
            }
            else
            {
                return Content(String.Format("Preço por Hora = {0} e Hora Adicional = {1}", results.preco_hora.ToString(), results.hora_adicional.ToString()));
            }
var hentrada=DateTime.Parse(“2016年8月5日”);
var results=db.Precos.Where(p=>p.dt_ini_vgcia=hentrada)。选择(p=>new{p.preco_hora,p.hora_adicional})。FirstOrDefault();
如果(结果==null)
{
返回内容(“Nãhápreço registdo para este período de vigência”);
}
其他的
{
返回内容(String.Format(“Preço por Hora={0}e Hora Adicional={1}”、results.preco_Hora.ToString()、results.Hora_Adicional.ToString());
}

请检查查询中选定的列。我想你错过了下划线

preco\u hora,hora\u adicional

SqlQuery中插入参数值时,可以尝试添加新的
SqlParameters

新的SqlParameter(“@p1”,hentrada)

第二:在linq语句中指定变量

结果将是:

var hentrada = DateTime.Parse("05/08/2016");
var results = db.Precos
.Where(p => p.dt_ini_vgcia >= hentrada && p.dt_ini_vgcia <= hentrada)
.Select(p => new { p.preco_hora, p.hora_adicional });
var hentrada=DateTime.Parse(“2016年8月5日”);
var results=db.Precos
其中(p=>p.dt_ini_vgcia>=hentrada和p.dt_ini_vgcia new{p.preco_hora,p.hora_adicional});

请检查查询中选定的列。我想你错过了下划线

preco\u hora,hora\u adicional

SqlQuery中插入参数值时,可以尝试添加新的
SqlParameters

新的SqlParameter(“@p1”,hentrada)

第二:在linq语句中指定变量

结果将是:

var hentrada = DateTime.Parse("05/08/2016");
var results = db.Precos
.Where(p => p.dt_ini_vgcia >= hentrada && p.dt_ini_vgcia <= hentrada)
.Select(p => new { p.preco_hora, p.hora_adicional });
var hentrada=DateTime.Parse(“2016年8月5日”);
var results=db.Precos
其中(p=>p.dt_ini_vgcia>=hentrada和p.dt_ini_vgcia new{p.preco_hora,p.hora_adicional});

代码中值得注意的两件事是:

查询


  • 检查包含
    select preco\u hora,hora adicional
    ->的查询,检查列名
    hora adicional
    中是否有空格,或者看起来是否像
    hora adicional
  • 返回语句

  • 返回内容(“Resultado:={0}”,results.ToString())
    ->
    results.ToString()
    这将返回类似于
    IQueryable
    的内容,而不是预期的结果 建议

    您可以尝试使用
    LINQ
    tosql来避免文本的自由流动和EF的易用性

     using System.Linq; //namespace
    
     var hentrada = DateTime.Parse("05/08/2016"); // do the parsing here and not in LINQ query.
    
     var results = db.Precos.Where(p => p.dt_ini_vgcia >=  hentrada
                   && p.dt_ini_vgcia <= hentrada)
                  .Select(p => $"{p.preco_hora} {p.hora_adicional}"); 
    // assuming dataType of `dt_ini_vgcia` is DateTime
    
    使用System.Linq//名称空间
    var hentrada=DateTime.Parse(“2016年8月5日”);//在这里进行解析,而不是在LINQ查询中。
    var结果=db.Precos.其中(p=>p.dt\u ini\u vgcia>=hentrada
    &&p.dt_ini_vgcia$“{p.preco_hora}{p.hora_adicional}”);
    //假设'dt_ini_vgcia'的数据类型是DateTime
    

    注意:这里的结果类型是字符串的集合,而不仅仅是一个。如果您只希望得到一个结果,请使用
    SingleOrDefault

    代码中值得注意的两件事是:

    查询


  • 检查包含
    select preco\u hora,hora adicional
    ->的查询,检查列名
    hora adicional
    中是否有空格,或者看起来是否像
    hora adicional
  • 返回语句

  • 返回内容(“Resultado:={0}”,results.ToString())
    ->
    results.ToString()
    这将返回类似于
    IQueryable
    的内容,而不是预期的结果 建议

    您可以尝试使用
    LINQ
    tosql来避免文本的自由流动和EF的易用性

     using System.Linq; //namespace
    
     var hentrada = DateTime.Parse("05/08/2016"); // do the parsing here and not in LINQ query.
    
     var results = db.Precos.Where(p => p.dt_ini_vgcia >=  hentrada
                   && p.dt_ini_vgcia <= hentrada)
                  .Select(p => $"{p.preco_hora} {p.hora_adicional}"); 
    // assuming dataType of `dt_ini_vgcia` is DateTime
    
    使用System.Linq//名称空间
    var hentrada=DateTime.Parse(“2016年8月5日”);//在这里进行解析,而不是在LINQ查询中。
    var结果=db.Precos.其中(p=>p.dt\u ini\u vgcia>=hentrada
    &&p.dt_ini_vgcia$“{p.preco_hora}{p.hora_adicional}”);
    //假设'dt_ini_vgcia'的数据类型是DateTime
    

    注意:这里的结果类型是字符串的集合,而不仅仅是一个。如果只需要一个结果,请使用
    SingleOrDefault

    问题是合乎逻辑的,您需要阅读有关数据连接和绑定的更多信息。使用参数声明变量,如(@p1)。例子是最好的解释。 尝试使用以下方法:

         //Connections methods vary use whatever you like 
        string connectionString = WebConfigurationManager.ConnectionStrings["Your_String_Name"].ConnectionString;
        SqlConnection conn = new SqlConnection(connectionString);
    
        SqlCommand cmd = new SqlCommand(conn);
        cmd.CommandType = CommandType.Text;
        conn.open();
        string hentrada = "05/08/2016";
        cmd.CommandText = "SELECT preco_hora, hora_adicional FROM db.Precos where 
        dt_ini_vgcia <= @p1 AND dt_fim_vgcia >= @p2";
        cmd.Parameters.Add("@p1", hentrada);
        cmd.Parameters.Add("@p2", somthingelse);
    
    //to view the results of select query 
     DataSet exampledataset = new DataSet(); //data set to hold the data
     SqlDataAdapter adapt = new SqlDataAdapter(cmd); // will put the results from cmd inside an adaprter.
     adapt.Fill(exampledataset); // data moved from adapter to data set 
     Gridview1.DataSource = exampledataset; //you can use gridview to present the data or any other tool.
     Gridview1.DataBind();
    
     conn.Close();
    
    //连接方法多种多样,可以随意使用
    string connectionString=WebConfiguration Manager.connectionString[“您的字符串”
    
     using System.Linq; //namespace
    
     var hentrada = DateTime.Parse("05/08/2016"); // do the parsing here and not in LINQ query.
    
     var results = db.Precos.Where(p => p.dt_ini_vgcia >=  hentrada
                   && p.dt_ini_vgcia <= hentrada)
                  .Select(p => $"{p.preco_hora} {p.hora_adicional}"); 
    // assuming dataType of `dt_ini_vgcia` is DateTime
    
         //Connections methods vary use whatever you like 
        string connectionString = WebConfigurationManager.ConnectionStrings["Your_String_Name"].ConnectionString;
        SqlConnection conn = new SqlConnection(connectionString);
    
        SqlCommand cmd = new SqlCommand(conn);
        cmd.CommandType = CommandType.Text;
        conn.open();
        string hentrada = "05/08/2016";
        cmd.CommandText = "SELECT preco_hora, hora_adicional FROM db.Precos where 
        dt_ini_vgcia <= @p1 AND dt_fim_vgcia >= @p2";
        cmd.Parameters.Add("@p1", hentrada);
        cmd.Parameters.Add("@p2", somthingelse);
    
    //to view the results of select query 
     DataSet exampledataset = new DataSet(); //data set to hold the data
     SqlDataAdapter adapt = new SqlDataAdapter(cmd); // will put the results from cmd inside an adaprter.
     adapt.Fill(exampledataset); // data moved from adapter to data set 
     Gridview1.DataSource = exampledataset; //you can use gridview to present the data or any other tool.
     Gridview1.DataBind();
    
     conn.Close();