为什么数据库查询看起来像这样?

时间:2015-05-12 09:45:54

标签: c# sql asp.net-mvc

我想查询数据库并显示结果。这是我的代码:

[HttpGet]
public ActionResult Index(string message)
{
    var Result = from Client in db.Clients
                   where Clients.ClientName == message
                   select Clients.ClientName;

    ViewBag.Message = Result;

    getCurrentUser();
    return View();
}

其中消息是从输入元素获取的变量。我想在视图中使用ViewBag.Message来显示它。在页面上我看到:

SELECT [Extent1].[ClientId] AS [ClientId], [Extent1].[ClientName] AS [ClientName] FROM [dbo].[Clients] AS [Extent1] WHERE [Extent1].[ClientName] = @p__linq__0

这是什么意思?

2 个答案:

答案 0 :(得分:4)

Result变量包含LINQ查询 - 而不是字符串。由于您暗示要显示一条消息,因此您需要获得第一个结果 - 而不是查询本身:

ViewBag.Message = Result.FirstOrDefault();

但是,这假设您确实希望ViewBag.MessageClientName数据库列的值(后者与message相同),我怀疑这不是你真正想要的......

回答你原来的问题:

您看到的是在ToString()上调用DbQuery<T>的结果,它会为您提供用于获取所需数据的SQL查询。

答案 1 :(得分:0)

只有在循环查询后才会执行查询。因此,您需要调用Result.ToList()来实际获取值

     OleDbCommand cmd = new OleDbCommand("SELECT ID FROM materials WHERE    Type=1", db_def.conn);
     OleDbDataReader reader = cmd.ExecuteReader();
    int result=-1 ;
     if (reader.HasRows)
     {
       reader.Read();
       result = reader.GetInt32(0);
     }
if (result != -1)
{
     strSQL = "UPDATE materials SET ";
     strSQL = strSQL + "Dscr = 'concrete', ";
     strSQL = strSQL + "width=50 ";
     strSQL = strSQL + " WHERE ID="+result;
     objCmd = new OleDbCommand(strSQL, db_def.conn);
     objCmd.ExecuteNonQuery();
}