我是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值?
答案 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)
因为mV
是IQueryable
,您可以将其视为一种列表或数组。所以你需要得到第一个值:
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 [...]