2011-01-04 6 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

IF 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()は検索結果をテストする正しい方法です。また、リターンの結果を使用しない場合は、データを匿名型に投影する必要はありません。 select trueまたはselect cqを使用すると、オプティマイザはDB内で最良のインデックスを使用できます。

+0

tryparseのように思われるより強力なかもしれない我々はここでユーザーの入力を扱っている –

関連する問題