2012-07-20 5 views
2

나는 쿼리를 사용하여 사용자가 이미 데이터베이스에 있는지 확인합니다. 사용자를 찾으면 데이터베이스가 아닌 목록에 추가하고 메시지를 표시합니다. 사용자가 아직 존재하지 않으면 프로그램을 계속 실행하여 사용자를 추가합니다.결과가 없을 때 linq 쿼리는 무엇을 반환합니까?

결과에 아무 것도없는 경우 쿼리 결과를 목록에 추가 할 때 문제가 있습니다. 쿼리에서 아무 것도 발견되지 않은 경우 (사용자가 아직 존재하지 않음) 반환 된 값이 null 또는 0이 아니므로이를 확인하는 방법을 모르겠습니다.

내 코드는 정상적으로 작동하지만 내 문제는 좀 더 우아한 접근 방법을 찾고 있습니다. 쿼리 결과를 목록에 추가하려고합니다. 그의 "캐치 (catch)"는 사용자가 존재하지 않고 추가 될 것임을 의미합니다. 지금 내 코드 :

 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

+1

'.ToList '을 호출하면 일치하는 결과를 반환하지 않아도됩니다. 그것은 단지 그것에 0 엔트리가있는 목록 일 것입니다. – mellamokb

+0

내가 처음 시도한 것이 었습니다. 하지만 어떤 종류의 목록과도 일치하지 않는 결과를 추가하려고하면 예외가 발생합니다. 그래서 내 해결 방법은 내 코드의 나머지 부분을 실행하는 방법으로이 예외를 사용하는 것이 었습니다. – tomo

답변

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

null과 empty가 서로 다른 두 가지이므로 올바른 답이라고 확신하지는 않습니다. 개체 내의 쿼리 결과가 아무 것도 발견되지 않았음에도 불구하고 쿼리가 null이 아닌 개체를 반환하는 것을 보았습니다. – shawn1874

+0

결과가 항상 확실하지 않으면 FirstOrDefault는 null을 반환해야합니까? 0의 결과로 어떻게 실패했는지에 대해 자세히 설명해 주시겠습니까? – user2330270

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의 숫자를 반환하기 때문에 효율적입니다.