我有一对多的关系链。
我想从表的最后一个链中检索对象,具体取决于第一个表中的选择
这是我的linq: var list = new List(); ObjectA是根表
IEnumerable<ObjectA> selectedObjectsAs = GetGrantedObjectAs(id).ToList();
IEnumerable<ObjectC> selectedObjectsCs
= from c in DbContext.ObjectCs
join b in DbContext.ObjectBs on c.BId equals b.Id
join a in DbContext.ObjectAs on b.AId equals a.Id
where selectedObjectsAs.Contains(a)
select c;
list.AddRange(selectedObjectsCs.ToList());
当最后一行运行到AddRange时,我得到以下异常
无法创建“ObjectA”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
知道问题出在哪里?
答案 0 :(得分:0)
join b in DbContext.ObjectBs on c.BId equals c.Id
您尝试加入b
并引用c
两个引用。
将c.Id
更改为b.Id
我认为可行。
答案 1 :(得分:0)
我认为这就是你要找的东西(使用导航属性):
//Contains method in Linq to entities only works with primitive types or enumeration types
var IdsOfA=GetGrantedObjectAs(id).Select(a=>a.Id);
var selectedObjectsCs=DbContext.ObjectAs.Where(a=>IdsOfA.Contains(a.Id))
.SelectMany(a=>a.Bs.SelectMany(b=>b.Cs))