2011-01-04 3 views
1

안녕 얘들 아 나는 내 linq 어떤 결과를 반환하는 경우 데이터 소스로 사용하고자하는 결과를 반환하는 경우 확인하는 동안 몇 가지 문제에 직면하고있다, 엔티티 프레임 워크를 사용하고 있습니다, 다음 코드는 제발 좀 봐주세요 :내 Linq 쿼리가 결과를 생성했는지 어떻게 확인합니까?

var dbContext = new DBEntities(); 
    try 
    { 
     var linQuery = from cq in dbContext.tblCharacteristics 
         where cq.CharacteristicID.Equals(combobox1.SelectedText) 
         select new 
         { 
          CharacteristicIDs = cq.CharID, 
          CharacteristicNames = cq.CharName 
         }; 

     if (linQuery.Any()) //Also tried with linQuery.Count() != 0 
     { 
      lbChaKeyValues.DataSource = linQuery; 
      lbChaKeyValues.DisplayMember = "CharacteristicNames"; 
     } 
    } 
    catch (System.Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     dbContext.Dispose(); 
    } 

다음 오류가 발생합니다. "DbComparisonExpression은 비슷한 유형의 인수가 필요합니다."

+2

'charQuery' 란 무엇입니까? 정의 된 것은 무엇입니까? –

+0

@Kman, 유효한 질문입니다. 문제는 아니지만, 적어도이 특정 변수는 그 변수와 관련이 있습니다. –

+1

가능한 중복 [내 linq 쿼리가 null을 반환하는지 확인하는 방법] (http://stackoverflow.com/questions/4132514/how-to-know-if-my-linq-query-returns-null) – Guffa

답변

3

CharacteristicID가 정수 유형 인 경우 비교가 작동하지 않습니다. 대신 시도하십시오

var inputFromUser = Int32.Parse(combobox1.SelectedText); 

    var linQuery = from cq in dbContext.tblCharacteristics 
        where cq.CharacteristicID == inputFromUser 
        select new 
        { 
         CharacteristicIDs = cq.CharID, 
         CharacteristicNames = cq.CharName 
        }; 

부수적으로 검색 결과를 테스트하는 올바른 방법은 .Any()입니다. 반환 결과를 사용하지 않으려는 경우 데이터를 익명 형식으로 투영 할 필요가 없습니다. 옵티마이 저가 DB에서 최상의 인덱스를 사용할 수 있도록 select true 또는 select cq을 사용하면됩니다.

+0

tryparse가 우리가 사용자 입력을 다루는 것처럼 더 강력 할 수도 있습니다. –

관련 문제