2011-01-04 1 views
72

次のコードサンプルです:Linqクエリは「System.Object ....型の定数値を作成できません」という理由を繰り返します。なぜですか?

private void loadCustomer(int custIdToQuery) 
    { 
     var dbContext = new SampleDB(); 
     try 
     { 
      var customerContext = from t in dbContext.tblCustomers  // keeps throwing: 
            where t.CustID.Equals(custIdToQuery) // Unable to create a constant value of type 'System.Object'. 
            select new       // Only primitive types ('such as Int32, String, and Guid') 
            {         // are supported in this context. 
             branchId = t.CustomerBranchID, // 
             branchName = t.BranchName  // 
            };         // 

      if (customerContext.ToList().Count() < 1) //Already Tried customerContext.Any() 
      { 
       lstbCustomers.DataSource = customerContext; 
       lstbCustomers.DisplayMember = "branchName"; 
       lstbCustomers.ValueMember = "branchId"; 
      } 
      else 
      { 
       lstbCustomers.Items.Add("There are no branches defined for the selected customer."); 
       lstbCustomers.Refresh(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      dbContext.Dispose(); 
     } 
    } 

私は私が間違っているのかを理解することができません。私は続ける"タイプ 'System.Object'の定数値を作成できません。このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。

答えて

170

使用は==の代わりに等しい:

where t.CustID == custIdToQuery 

種類が間違っている場合は、これがコンパイルされないことがあります。

+2

感謝です:( – Neel

+9

"t.CustID == custIdToQuery"と "t.CustID.Equals(custIdToQuery)"の違いを教えてください。事前に感謝しています – Neel

+0

@ニール '=='と '.Equals()'の違いについてこの質問を見てください:http://stackoverflow.com/questions/814878/c-sharp-difference-between- and-equal – Alex

7

null可能な10進数で.Equalsを実行しようとしていたとき、同じ問題が発生しました。代わりに==を使うとうまく動作します。私は10進数の正確な "タイプ"にマッチさせようとしているわけではないからです。小数点まで

+4

これは 'IQueryable'のコンテキストにあるので、通常のC#コードにはコンパイルされません。クエリプロバイダーに渡される式になります。そのクエリープロバイダは、クエリーで必要なことを何でも行うことができ、 'Equals'と' == 'を同じかどうかに対応することができます。 – Servy

+0

'Int32? 'と' Int32'を比較するために '.Equal()'を使いました。 'Int32?'は 'Int32'と' null'を含んでいるはずなので、うまくいくと思いました。しかし、それはしませんでした。 '=='が働いた。 – matrix

21

私はnullable intで同じ問題がありました。 ==を使用すると、代わりにうまく動作しますが、あなたは.Equalsを使用したい場合は、NULL可能変数の値と比較することができ、とても

where t.CustID.Value.Equals(custIdToQuery) 
-1

私は同じ問題に直面したと私はコレクションオブジェクトを比較しました。整数データ型"userid"x.User.Equals(userid)

from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.User.Equals(userid)) 

、正しいクエリきゅうが私に苦労を与えている男x.UserId.Equals(userid)

from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.UserId.Equals(userid)) 
+0

これは別の問題です。あなたはリンゴとオレンジを比較しています。 –

+0

どう違うのですか?私は同じ問題に直面している。私はちょうど他の人のためだけにこの答えを投稿します。 –

関連する問題