使用.Where()进行C#实体框架过滤

时间:2016-04-12 13:12:33

标签: c# entity-framework filtering

我正在使用实体框架在C#中工作,我正在尝试过滤联系人查询以获取具有相同ID的所有联系人。我可以获得所有Contacts,但我在使用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;
}

1 个答案:

答案 0 :(得分:3)

提供程序在识别无法转换为SQL的表达式时遇到问题。尝试简化表达式,以便更容易地将其转换为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;
}