Linq连接表并使用包含

时间:2017-03-17 17:16:39

标签: c# linq

我有一对多的关系链。

我想从表的最后一个链中检索对象,具体取决于第一个表中的选择

这是我的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”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

知道问题出在哪里?

2 个答案:

答案 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))