我想查询数据库并显示结果。这是我的代码:
[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
这是什么意思?
答案 0 :(得分:4)
Result
变量包含LINQ查询 - 而不是字符串。由于您暗示要显示一条消息,因此您需要获得第一个结果 - 而不是查询本身:
ViewBag.Message = Result.FirstOrDefault();
但是,这假设您确实希望ViewBag.Message
为ClientName
数据库列的值(后者与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();
}