2014-03-14 172 views
0

我已经创建了一个变量来检查数据库中是否存在一行。但是,当我把变量放在一个if语句中来检查它是否为null并且该变量为null时,它总是转到else而不是继续if语句。检查空变量C#

是否有另一种方法检查变量是否为空而不是== null

var following = objCtx.Followusers.Where(c => c.User1ID == currentUser.Id || c.User2ID == cus.Id); 
if (following == null) 
{ 
    using (Html.BeginForm("Followruser", "Users")) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

     @Html.Hidden("Id", Id) 
     <input type="submit" value="follow" class="btn btn-default" /> 
    } 
} 
else 
{ 
    using (Html.BeginForm("unfollowruser", "Users")) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

     @Html.Hidden("Id", Id) 
     <input type="submit" value="following" class="btn btn-default" /> 
    } 

} 

回答

3

Where运营商将永远不会返回null。如果你只是想检查一条记录是否存在,这也是错误的方法。我会用Any代替。

bool following = objCtx.Followusers.Any(
    c => c.User1ID == currentUser.Id || c.User2ID == cus.Id); 
2

将其更改为:

var following = objCtx.Followusers.Where(c => c.User1ID == currentUser.Id || c.User2ID == cus.Id).SingleOrDefault(); 

如果没有行被发现,应该返回NULL。

+1

如果有多个记录,将会抛出'InvalidOperationException' .. – lastr2d2

+0

良好的捕获lastr2d2。 – HaukurHaf

0

返回的对象从不为null,它的值可能是。 使用“FirstOrDefault()”,以使结果为空,如果是没有的:

var following = objCtx.Followusers.Where(c => c.User1ID == currentUser.Id || c.User2ID == cus.Id).FirstOrDefault(); 

或询问的结果,如果有任何值:

if(following.Any()) 
+0

该查询意味着结果集中可能有多个记录。它可能不是这样,但是'FirstOrDefault(...)'比这里的'SingleOrDefault(...)'更好。 – Silvermind

0

如果你想保持你给什么,您还可以统计谓词返回的值的数量。

if (following != null && following.Count < 1) 

这应该适合你我认为。

+0

不正确,结果是'IEnumerable'类型。 – Silvermind