当我调用此linq查询时,我收到以下错误:
无法在LINQ to Entities查询中构造实体或复杂类型“DataModel.CustomerContact”。
我不明白我在这里做错了什么。通常,当我没有加入任何其他表并且没有导航属性时,我通常只选择cc,但在这种情况下,我需要创建一个新的CustomerContact对象,以便我可以绑定导航属性。
我对此做了一些研究,是否真的没办法做到这一点?如果我使用匿名类型,我如何转换为CustomerContact,因为我需要最终将CustomerContact列表返回给我的应用程序?如果我只选择cc,那么cc.CustomerName将不会被设置。我真的想避免在我能够使用自动生成的EF对象类时创建Dtos。
public static IEnumerable<CustomerContacts> GetList(int customerId = null)
{
using (var context = new AppContext())
{
var cList = (from cc in context.CustomerContacts
join c in context.Customers on cc.CustomerId equals c.Id
where (customerId == null || cc.CustomerId == customerId)
select new CustomerContact
{
Id = cc.Id,
FirstName = cc.FirstName,
LastName = cc.LastName,
Email = cc.Email,
// navigation properties
CustomerName = c.Name
}).ToList();
return objList;
}
}
答案 0 :(得分:0)
如果我只选择cc,那么cc.CustomerName将不会被设置
你可以这样做:
from cc in context.CustomerContacts.Include(cc => cc.CustomerName)
...为您自动加载导航属性。搜索“EF导航属性延迟加载”。
注意,你需要'使用一些我不记得的命名空间'来使用该语法,因为它使用扩展方法。否则,您只需引用要加载的导航属性的名称,如:
from cc in context.CustomerContacts.Include("CustomerName")