2016-04-12 15 views
2

C# ile Entity Framework kullanarak çalışıyorum ve aynı Kimliği olan tüm kişileri almak için kişi sorgularını filtrelemeye çalışıyorum. Tüm Contacts alabilirim, ancak Where kullanarak filtreleme sorunları yaşıyorum. Bazı şeyleri yanlış biliyorum ama tam olarak belirleyemem, herhangi bir yardım takdir edilecektir.C# Entity Framework ile süzme .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' veri türü nedir? – Ian

+4

Bir istisna mı alıyorsunuz? '= Eşittir' yerine '==' kullanmayı denediniz mi? –

+0

@YacoubMassad evet Bunu denedim, sonuç Null kalır. Bunu bir break point ile çalıştırdığımı görebiliyorum, c.Id asla bir değer elde etmeyecek, sonuçta sadece parametrelerle karşılaştırır. Null'a. –

cevap

3

sağlayıcı SQL için tercüme edemez ifadeleri tanıma sorunları vardır:

aşağıda ilgili koda bakın. İfadeleri sadeleştirmeye çalışın, böylece SQL'e daha kolay bir şekilde çevrilebilir.

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

Bu size teşekkür etti. –