2012-07-20 104 views
2

我正在使用查询来查看用户是否已经存在于数据库中。如果它找到一个用户,它将它添加到列表(而不是数据库)中,并显示一条消息。如果用户不存在,程序会继续添加用户。当找不到结果时,linq查询返回什么

将查询结果添加到列表中时,存在问题,结果什么都没发现。如果查询什么都没有发现(用户还不存在),返回的值不是null或0,所以我不知道如何检查这个。

我的代码工作正常,但我的问题是试图找到一个更优雅的方法。我尝试将查询结果添加到列表中。如果他是“抓”,那就意味着用户不存在并且应该被添加。现在我的代码是:

 var userIsNew = 
         from f in controlEntities.Users 
         where (f.UserId == userIdTextBox.Text) 
         select f; 

        List<Users> temp = new List<Users>(); 

        try 
        { 
         temp = userIsNew.ToList<Users>(); 
        } 
        catch 
        { 
         //do nothing 
        } 


        if (temp.Count > 0) 
        { 
         MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
        } 

感谢您的帮助!

+0

[逻辑异常](http://msdn.microsoft.com/en-us/library/dd264997.aspx)*几乎总是*错误。 – mellamokb 2012-07-20 13:48:57

+1

对返回不匹配的结果调用'.ToList '应该可以正常工作。它只是一个有0个条目的列表。 – mellamokb 2012-07-20 13:53:47

+0

这是我第一次尝试。但是当我尝试添加没有匹配任何列表的结果时,它会引发异常。所以我的解决方法是使用此抛出的异常作为执行其余代码的一种方式。 – tomo 2012-07-20 13:56:56

回答

2
 var userIsNew = (from f in controlEntities.Users 
           where (f.UserId == userIdTextBox.Text) 
           select f).FirstOrDefault(); 


     if (userIsNew != null) 
     { 
      MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
     } 
+0

空和空是两件不同的事情,所以我不相信这是一个正确的答案。我已经看到一个查询返回一个非空对象,即使对象中的查询结果指示没有发现任何东西。 – shawn1874 2014-11-25 01:06:20

+0

如果总是找不到结果,FirstOrDefault应该返回null?你能详细说明它如何与0结果无关 – user2330270 2014-12-01 08:52:28

0

另一种方法是:

 bool userIsNew = controlEntities.Users. 
      Count(f => f.UserId == userIdTextBox.Text) == 0; 

     if (!userIsNew) 
     { 
      MessageBox.Show("This UserId already exists in the Database. \nPlease try another UserId."); 
     } 

这是有效的,因为数据服务器返回只有一个编号,而不是resulset。

相关问题