A lambda expression with a statement body cannot be converted to an expression tree in nopCommerce

23,537

The error message is exactly what it says. You have a lambda expression. It has a statement body. A lambda expression with a statement body can not be converted to an expression tree. But Join requires an expression tree to use with EF. You should try replacing what you have with a lambda expression that doesn't have a body like:

(cev, c) => new CustomerEventRolesModel {
                Id = cev.Id,
                CustomerId = c.Id
            }

And so on.

By the way,

ContactName = c.GetAttribute<string>(SystemCustomerAttributeNames.FirstName)

will NOT work with EF. Period. You better figure something else out.

Share:
23,537
Ragesh S
Author by

Ragesh S

Welcome, my name is Ragesh P R. I am a software developer from Cochin India who loves to write software to build great products and help businesses succeed with their goals. I really encourage good design and I am seeing its importance more than ever in today's apps, websites, and products. I have been working professionally in software development since 2010 in the web and mobile spaces with experience across various domains. Skype : ragesh.sl

Updated on October 17, 2020

Comments

  • Ragesh S
    Ragesh S over 3 years

    I try to create a linq join query in the nopCommerce 3.0. i join two table in linq and write

    the code successfully. but the visual studio intellicence shows the error like

    A lambda expression with a statement body cannot be converted to an expression tree

    please see my code below

     var roles = _customerEventRoleRepository.Table.Where(c => c.EventId == selevent)
                       .Join
                       (
                          _customerRepository.Table,
                          cev => cev.CustomerId, c => c.Id,
                          (cev, c) =>
                          {                             
                              var cust = new CustomerEventRolesModel();
    
                              cust.Id = cev.Id;
                              cust.CustomerId = c.Id;
                              cust.Customer = c.Email;
                              cust.ContactName = c.GetAttribute<string>(SystemCustomerAttributeNames.FirstName);
                              cust.CompanyName = c.GetAttribute<string>(SystemCustomerAttributeNames.Company);
                              cust.Speaker = cev.IsSpeaker;
                              cust.Sponsor = cev.IsSponser;
    
                              return cust;
                          }
                        ).OrderBy(cev => cev.Customer).ToList();
    

    but the error shows

    enter image description here

    please help