日期:2014-05-20  浏览次数:20788 次

判断用户是否存在,如果查询不存在,我下面的代码返回结果是null吗?
如果不存在,打印不存在!我下面的判断对吗?好像select后面可以加任意值,是不是这样?但是linq不是有个延迟查询码?好像我写的代码,result永远不为null?

 //创建LINQ查询语句,判断用户名是否存在
        var result = from v in ddc.Users
                     where v.Name==tbUserName.Text.Trim()
                     select v;
         if(result==null) response.write("not exist");


------最佳解决方案--------------------
没错,不过没必要
如果你用的ef之类的orm
result.FirstOrDefault() 生成的sql语句是 select top 2 * from...
result.Count() 是 select count(1) from...
------其他解决方案--------------------
 var result = from v in ddc.Users
                     where v.Name==tbUserName.Text.Trim()
                     select v;
         if(result.FirstOrDefault()==null) response.write("not exist");

------其他解决方案--------------------
Or:

if(result.Count()==0) response.write("not exist");

------其他解决方案--------------------
result 这个变量的类型是IQueryable,即使集合中没有元素,它也不是null

可以这样判断
if(!result.Any()) response.write("not exist");
------其他解决方案--------------------
跟Enumerable.Empty(), new List()类似,可以看成是一个空集合
------其他解决方案--------------------
引用:
Or:

if(result.Count()==0) response.write("not exist");


------其他解决方案--------------------
first要是为null的话会抛异常
------其他解决方案--------------------
引用:
 var result = from v in ddc.Users
                     where v.Name==tbUserName.Text.Trim()
                     select v;
         if(result.FirstOrDefault()==null) response.write("not exist");
……

谢谢1楼,
      First - 返回集合中的第一个元素;不延迟
    ·FirstOrDefault - 返回集合中的第一个元素(如果没有则返回默认值);不延迟

PS:
1.一定要用FirstOrDefault,不能用first?用first会出现异常?
2.最后select v是把整个表都查出来,感觉没有必要,你们平时查的时候,最后一个写的是啥?

------其他解决方案--------------------
引用:
result 这个变量的类型是IQueryable,即使集合中没有元素,它也不是null

可以这样判断
if(!result.Any()) response.write("not exist");

result 这个变量的类型是IQueryable,即使集合中没有元素,它也不是null
请问不是null,那是什么?
------其他解决方案--------------------