11

我尝试在 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();

但错误显示

在此处输入图像描述

请帮忙

4

1 回答 1

0

错误消息正是它所说的。你有一个 lambda 表达式。它有一个语句体。带有语句体的 lambda 表达式不能转换为表达式树。但是Join需要一个表达式树才能与 EF 一起使用。您应该尝试用没有主体的 lambda 表达式替换您拥有的内容,例如:

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

等等。

顺便一提,

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

不适用于 EF。时期。你最好想点别的。

于 2013-08-07T06:07:26.527 回答