2015-05-12 204 views
-4

我想查询数据库并显示结果。这是我的代码:为什么数据库查询看起来像这样?

[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 

这是什么意思?

回答

4

Result变量包含一个LINQ查询 - 不是一个字符串。既然你意味着你要显示一个消息,你需要得到的第一个结果 - 而不是查询本身:

ViewBag.Message = Result.FirstOrDefault(); 

然而,这假设你真正想要的ViewBag.MessageClientName数据库的价值列(这又是一样的message,我怀疑是不是你真正想要的...

要回答你原来的问题:

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

+0

谢谢,我现在明白了。你有权利,当我使用FirstOrDefault时,它再次回答一些奇怪的事情,但只有当我搜索现有的ClientName时才回答。 – pucek7

0

该查询只有在循环时才会执行。所以,你需要调用Result.ToList()来实际获得的价值

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

     ViewBag.Message = Result.ToList(); 

     getCurrentUser(); 
     return View(); 
    } 
+2

这将打印“System.Collections.Generic.List'[Client]”。 – CodeCaster

+0

You'll需要一个列表,而不是第一个元素列表本身 – HimBromBeere

+0

当我服用第一要素,我有类似的东西: System.Data.Entity.DynamicProxies.Client_02A0BB155C71D9541E0B7869114C4906EB16FF7D51481C04B389528738517799 这意味着,我有不好的SQL命令? – pucek7

相关问题