我想在IQueryable列表中包括子对象。

我想在某些表类型IQueryable列表的选定列上包括一个子对象。

我这样尝试过:

IQueryable<Persons> persons = Context.Persons.Select(x=> new persons{Pkid=x.pkid, FirstName=x.FirstName}).AsQueryable();

persons= persons.Include("Address");


这包括子对象不起作用..任何人都请帮忙...我做错了..
非常感谢...

最佳答案

Include不适用于投影。而且它是不需要的。只是这样做:

var query = context.Persons
                   .Select(x => new PersonDto
                       {
                          Id = x.pkid,
                          FirstName = x.FirstName,
                          Address = x.Address
                       });


这里的几点:


Include
在投影中直接访问Address,EF会处理
我正在使用PersonDto作为投影目标。 PersonDto只有IdFirstNameAddress
您可以投影到自定义类型或匿名类型,但是不能投影到实体类型(映射的类型)-它不起作用并且会引发异常。
如果要使用映射类型,则不能仅返回选定的标量列-所有列将始终加载。只能有选择地加载导航属性。为了克服这个问题,有时可以使用Table splitting,但是如果您可以将大实体划分为分离的实体,那么这将是有用的。在您的方案中,仅使用投影。

10-04 10:15