我尝试在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();
但错误显示
请帮助
答案 0 :(得分:2)
错误消息完全它的内容。你有一个lambda表达式。它有一个声明正文。具有语句主体的lambda表达式无法转换为表达式树。但Join
需要表达式树与EF一起使用。你应该尝试使用没有像下面这样的主体的lambda表达式替换你拥有的内容:
(cev, c) => new CustomerEventRolesModel {
Id = cev.Id,
CustomerId = c.Id
}
等等。
顺便说一下,
ContactName = c.GetAttribute<string>(SystemCustomerAttributeNames.FirstName)
不适用于EF。期。你最好找出别的东西。