具有语句主体的lambda表达式无法转换为nopCommerce中的表达式树

时间:2013-08-07 05:56:21

标签: c# asp.net-mvc-3 linq entity-framework-4 nopcommerce

我尝试在nopCommerce 3.0中创建一个linq连接查询。我在linq中加入了两个表并写了

代码成功。但是视觉工作室的知识分子显示了错误,如

带有语句正文的lambda表达式无法转换为表达式树

请参阅下面的代码

 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();

但错误显示

enter image description here

请帮助

1 个答案:

答案 0 :(得分:2)

错误消息完全它的内容。你有一个lambda表达式。它有一个声明正文。具有语句主体的lambda表达式无法转换为表达式树。但Join需要表达式树与EF一起使用。你应该尝试使用没有像下面这样的主体的lambda表达式替换你拥有的内容:

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

等等。

顺便说一下,

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

不适用于EF。期。你最好找出别的东西。