2014-09-01 53 views
0

我正在使用VS2013与SQL Server 2012,VB.net。我正在开发一个Web应用程序。使用linQ执行简单选择

让我说,在我问这个问题之前,这可能是非常简单的这个董事会,但我一直无法通过谷歌搜索找到这一点。

我有一个SQL表,它包含一些数据,两列(settingName(nvarchar)和settingValue(float))。我想要做以下事情,但使用LinQ。

SELECT Settingvalue 
FROM Settings 
WHERE settingName = 'Name1' 

到目前为止我在VB中有以下内容。

Dim db As New GMConnectionDataContext 

    Dim result = From a In db.Settings 
       Where a.SettingName = "Name1" 
       Select a.SettingValue 


    txtEgdon.Text = result 

这并不如结果工作是双,但如果我添加的ToString导致然后在文本框中输入输出是完整的LINQ查询没有结果,我looing了。

我只需要了解这个简单的查询,所以我可以建立它,但我不能得到它,任何提供的帮助将是伟大的。

回答

6

这是因为你的结果是IQueryable而不是单个值(即使你期望它是)。这也是为什么ToString会为您提供将针对您的数据库运行的SQL。

您需要获得First或者如果您确定这是单个值,请获取Single。在没有返回值的情况下使用OrDefault s,结果将为空。

几个选项:

// You expect 1 to many results and get the first 
txtEgdon.Text = result.First().ToString() 
// You expect 0 to many results and get the first or null in case of zero results 
txtEgdon.Text = result.FirstOrDefault().ToString() 
// You expect exactly 1 result and get it (you will get an exception if no results are returned) 
txtEgdon.Text = result.Single().ToString() 
// You expect exactly 0 or 1 results and get null or the result 
txtEgdon.Text = result.SingleOrDefault().ToString() 

我宁愿FirstOrDefault()

+0

随着'选项严格On'填充时,文本框,你就需要使用'ToString'。 – 2014-09-02 15:36:22

+0

@ChrisDunaway没有关于Option Strict On的建议,是吗? – 2014-09-02 15:39:15

+0

它应该开启,我只想指出,如果它是_is_ on,你的代码就不会编译。在我看来,VB.Net的代码示例应该写为“Option Strict”,以鼓励最佳实践。 – 2014-09-02 15:42:02