0

我有一个这样的查询:

 Dim clcexists = (From p In dbContext.Signatures _
                          Where p.StudentID = people_id _
                         And p.ContractType = "clc" _
                          Order By p.ID Descending _
                           Select p)

稍后我使用 IsNothing 检查 clcexists 中是否存在任何行,如下所示:

   If IsNothing(clcexists) Then ' If no CLC is on file.
            clcfirst = Date.Now.Subtract(year)
            clcdate = clcfirst
        Else ' If CLC is on file.
            clcfirst = clcexists.FirstOrDefault()
            clcdate = clcfirst.SignatureDate
        End If

但是 IsNothing() 并没有像我预期的那样运行。结果表中没有行,但它仍然表现得好像存在并转到 Else 子句。帮助?

4

3 回答 3

3

您可能想Any改用:

If Not clcexists.Any() Then ' no CLC is on file.
    clcfirst = Date.Now.Subtract(year)
    clcdate = clcfirst
Else ' If CLC is on file.
    clcfirst = clcexists.FirstOrDefault()
    clcdate = clcfirst.SignatureDate
End If
于 2012-04-12T13:18:31.940 回答
2

IsNothing检查引用是否具有分配给它的对象实例(即它不是null)。在您的情况下,对象不是null,因为它指向没有行的实例。

http://msdn.microsoft.com/en-us/library/5adx7fxz(v=vs.71).aspx

您应该使用Rows.Count,Rows.Any()HasRows属性来检查您的实例上是否存在行。

于 2012-04-12T13:26:11.417 回答
1

使用 HasRows 属性:

http://msdn.microsoft.com/en-us/library/system.data.datatablereader.hasrows.aspx

于 2012-04-12T13:16:39.553 回答