Linq 有没有一种简单的方法来获取多对多关系的子集?

Linq 有没有一种简单的方法来获取多对多关系的子集?,linq,entity-framework,entity-framework-4,linq-to-entities,Linq,Entity Framework,Entity Framework 4,Linq To Entities,我有一段感情 Order1=>ItemMany=>distribtuionMany=>recipientsMany 是否有一种有效的方法使用linq到实体EF4来获取: a订单的所有收件人? B 收件人的所有项目 顺序 这是我的解决方案当前的解决方案: List<Distribution> distributions = new List<Distribution>(); List<Recipient> recipients = new List&

我有一段感情 Order1=>ItemMany=>distribtuionMany=>recipientsMany

是否有一种有效的方法使用linq到实体EF4来获取:

a订单的所有收件人? B 收件人的所有项目 顺序 这是我的解决方案当前的解决方案:

   List<Distribution> distributions = new List<Distribution>();
   List<Recipient> recipients = new List<Recipient>();
    foreach (OrderItem oi in  order.OrderItems)
                {
                    foreach (Distribution d in oi.Distributions)
                        if (!distributions.Contains(d))
                        {
                            distributions.Add(d);
                            foreach (Recipient r in d.Recipients)
                                if (!recipients.Contains(r))
                                    recipients.Add(r);
                        }

                }

我认为应该有一种方法可以通过一个linq查询获取Order.Orderitems.Distribution.Recipients,但可能我错了。

您可以使用双向属性执行以下操作:

IEnumerable<Recipient> orderRecipients = 
    Entities.Recipients.Where(r => r.Distribution.Item.OrderID == OrderID);

根据您的实际实体名称和外键,b也有类似的情况。

我也在想同样的事情,但当我去编码它时,这些子集并不存在。您需要一个外键链接数据库中的表,并在您的数据库中选择“从数据库更新模型”时选中“在模型中包含外键列”复选框edmx模型。该表存在,但EF4将其隐藏。