我正在使用VS2013和SQL server 2012,VB.net。我正在开发一个Web应用程序。
在我提出这个问题之前,我先说这个问题对于这个委员会来说可能非常简单,但是我无法通过谷歌搜索找到这个。
我有一个包含一些数据的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
这不起作用,因为结果是double,但是如果我将.tostring添加到结果中,那么文本框中的输出就是完整的linq查询,而不是我正在考虑的结果。
我只需要了解这个简单的查询,这样我就可以在此基础上进行构建,但我无法得到它,并且提供的任何帮助都会很棒。
答案 0 :(得分:6)
这是因为您的结果是IQueryable
而不是单个值(即使您预计会是这样)。这也是ToString
将为您提供将针对您的数据库运行的SQL的原因。
您需要获得First
,或者如果您确定这是一个单一的值Single
。如果没有返回任何值,则使用OrDefault
s,因此结果将为null。
一些选项:
// 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()