2016-04-12 15 views
2

私はC#でEntity Frameworkを使用していますが、同じIDを持つすべての連絡先を取得するために連絡先のクエリをフィルタリングしようとしています。私はすべてContactsを得ることができますが、私はWhereを使用して問題をフィルタリングしています。間違っていることは分かっていますが、それを正確に指摘することはできません。プロバイダは、それがSQLに変換することができない表現を認識の問題を持っているC#Entity Frameworkフィルタリング.Where()

public IEnumerable<model.Contact> Execute(GetContactById parameters) 
{ 
    IEnumerable<model.Contact> ContactsById = null; 

    DbRetryHandler.RetryHandler(delegate(DeviceModelContext retryContext) 
    { 
     ContactsById = retryContext.Contact 
        .Where(c => c.Id.equals(parameters.Id)) 
        .Select(c => new model.Contact 
        { 
         // unrelated code 
        }); 
       }); 

       return ContactsById; 
} 
+0

'parameters.Id'データ型とは何ですか? – Ian

+4

例外が発生していますか? 'Equals'の代わりに' == 'を使用しようとしましたか? –

+0

@ YacoubMassadはい私はそれを試しました、結果はNullのままです。私はこれをいつブレークポイントで実行するのが見えるのですか?c.Idは決して値を取得しないので、最終的にパラメータを比較するだけです.Id to Null。 –

答えて

3

は、以下の関連するコードを参照してください。簡単にSQLに変換できるように式を簡略化してみてください。

public IEnumerable<model.Contact> Execute(GetContactById parameters) 
{ 
    IEnumerable<model.Contact> ContactsById = null; 
    DbRetryHandler.RetryHandler(delegate(DeviceModelContext retryContext) 
    { 
     var parametersId = parameters.Id; // <-- store id in variable 
     camerasByDeviceId = retryContext.Contact 
      .Where(c => c.Id == parametersId) // <-- use == instead of Equals 
      .Select(c => new model.Camera 
      { 
       // unrelated code 
      }); 
    }); 

    return ContactsById; 
} 
+0

これはトリックに感謝しました。 –

関連する問題