我正在尝试使用Entity Framework构建一个层次结构集合 - 请参阅下面的查询 - 给定公司中的每个成员都有一个父成员 - 但在尝试执行此操作时,我得到以下异常:
System.NotSupportedException:类型 “会员”在结构上出现在两个方面 一个不兼容的初始化 单个LINQ to Entities查询。一种 可以在两个地方初始化 相同的查询,但只有相同 属性在两个地方设置 这些属性设置相同 订购。
如果我删除了ParentMember分配它是否有效 - 任何有关正在发生的事情的想法?
return from c in _Entities.Company
where c.Deleted == false
select new Member()
{
Name = c.Name,
ParentMember = new Member()
{
Name = c.ParentMember.Name
}
};
答案 0 :(得分:12)
我没试过这个,但是错误信息给你一个线索:你没有在两个地方以相同的顺序设置相同的属性。
如果您尝试在外部Member()上设置ID属性会怎样?
答案 1 :(得分:2)
尝试
return (from c in _Entities.Company
where c.Deleted == false
select new
{
c.Name,
ParentMember = new
{
c.ParentMember.Name
}
})
.AsEnumerable()
.Select(c=> new Member
{
Name = c.Name,
ParentMember = new Member
{
Name = c.ParentMember.Name
}
});
答案 2 :(得分:1)
当您尝试在每个记录中检索相同的字段时,最终会得到成员记录的递归。您不能只使最后一个父记录等于null。
我会检索我能做什么,然后用进一步的查询构建记录。请注意,您的公司实体将需要ParentId字段或类似字段。
var members =
return from c in _Entities.Company
select new Member()
{
Name = c.Name,
ParentId = c.ParentId
};
现在迭代并添加父记录。
foreach (var member in members)
{
member.ParentMember = new Member
{
Name = _Entities.Company.First(c => c.Id == member.ParentId).Name
};
}