如何从Linq IQueryable对象中提取值?

时间:2015-10-12 14:17:31

标签: vb.net linq vb.net-2010

我是Linq的新手,已经被困了好几天了。我已经搜索了这个和其他几个板来找到答案,但不能。我有一个Linq查询返回1的int值。

Public Function myV()
    Dim MR As New MainEntities()
    Dim mV = From AspNetUsers In MR.AspNetUsers
                Where Context.User.Identity.Name() = AspNetUsers.Email.ToString Select AspNetUsers.VB
    Return mV
End Function

If myV = 1 Then
perform other code
End If

但是当我尝试与Int进行比较时,它表示无法比较对象。我试图将IQueryable(Interger)转换为Int而不能。如何获取IQueryable对象中的Interger值?

3 个答案:

答案 0 :(得分:1)

LINQ语句返回一个IEnumerable,它就像一个数组,因为它可以包含多个值,即使它恰好只有一个值。

如果要在存在多个值时抛出异常,则返回单个值的最佳方法是.First().Single()。 (您选择哪一个取决于您的背景。)

Public Function myV()
    Dim MR As New MainEntities()
    Dim mV = From AspNetUsers In MR.AspNetUsers
                Where Context.User.Identity.Name() = AspNetUsers.Email.ToString Select AspNetUsers.VB.First()
    Return mV
End Function

答案 1 :(得分:0)

因为mVIQueryable,您可以将其视为一种列表或数组。所以你需要得到第一个值:

If myV.First() = 1 Then
    '...
End If

或者更有可能你想在mV函数中执行此操作:

Dim mV = From AspNetUsers In MR.AspNetUsers
         Where Context.User.Identity.Name() = AspNetUsers.Email.ToString
         Select AspNetUsers.VB
Return mV.First()

答案 2 :(得分:0)

您误解了查询。您的LINQ执行以下SQL语句:

SELECT AspNetUsers.VB
FROM AspNetUsers
WHERE ApsNetUsers.Email = "here the name"

因此,查询不会只返回一个VB,而是一个由一列和多行组成的表。

要检索第一个值,您必须调用.First()

If myV.First() = 1 Then [...]
相关问题