我想在IQueryable列表中包含子对象..
我想在某些表类型IQueryable list ..
的选定列中包含一个子对象我试过这样:
IQueryable<Persons> persons = Context.Persons.Select(x=> new persons{Pkid=x.pkid, FirstName=x.FirstName}).AsQueryable();
persons= persons.Include("Address");
这包括儿童物品不起作用..请帮助......我做错了... 非常感谢...
答案 0 :(得分:3)
Include
不适用于投影。而且不需要它。就这样做:
var query = context.Persons
.Select(x => new PersonDto
{
Id = x.pkid,
FirstName = x.FirstName,
Address = x.Address
});
这里有几点:
Include
Address
直接在投影中访问,EF将处理此PersonDto
作为投影目标。 PersonDto
只有Id
,FirstName
和Address
。答案 1 :(得分:2)
您无法在投影上使用Include()
,请尝试以下操作:
Iquerable<Persons> persons = Context.Persons
.Include("Address")
.Select(x=> new persons{Pkid=x.pkid, FirstName=x.FirstName})
.AsQuerable();
您还有一个命名冲突,您投射到persons
类型,并希望将结果保存在名为IQueryable
的{{1}}中 - 其中一个错误。您是否有理由需要投影?你可以做到
persons
答案 2 :(得分:2)
首先:检查是否启用了延迟加载。启用后,我遇到了不同的结果。我更喜欢延迟加载被禁用。
第二:检查这个语法:
result = (From person In context.Persons.Include("Address")).ToList();
P.S。:有用的EF提示&amp;技巧:http://blogs.msdn.com/b/alexj/archive/2009/03/26/index-of-tips.aspx
<强>更新强>
包含不起作用,因为您在新创建的对象上使用它,而不是在上下文中可用的对象。你应该在创建新对象之前使用Include。
检查:
result = (From person In context.Persons.Include("Address") Select New With {.FirstName = item.FirstName, .AddressValue = item.Address.Value}).ToList();