EF6查询跨多个多对多关系

时间:2015-06-25 01:53:17

标签: many-to-many entity-framework-6

我有一个与其他两个模型有多对多关系的组模型。这是一个简化的代码,首先帮助解释:

public class Store
{
    public int ID {get; set;}
    public string Name {get; set;}

    public virtual ICollection<StockGroup> StockGroups { get; set; }
}

public class StockItem
    public int ID {get; set;}
    public string Name {get; set;}

    public virtual ICollection<StockGroup> StockGroups { get; set; }
}

public class StockGroup 
    public int ID {get; set;}
    public string Name {get; set;}

    public virtual ICollection<Store> Stores { get; set; }
    public virtual ICollection<StockItem> StockItems { get; set; }
}

使用Fluent API我在Store和StockGroup以及StockItem和StockGroup之间创建了多对多关系。这反过来创建了两个连接表。

我遇到的问题是我似乎无法创建从Store到StockItem的查询,反之则不使用foreach循环。

例如:给定一个StockItem,我想知道通过StockGroup表与之相关的所有商店。我试过这样的东西,但它返回的是一个集合的集合。

var stock = db.StockItems.Find(4);
var stores = stock.StockGroups.Select(g => g.Stores);

如何重写这个以组合StockGroups给我一个商店的集合?

谢谢!

1 个答案:

答案 0 :(得分:0)

You can use SelectMany() to flatten the hierarchy:

var stores = stock.SelectMany(s => s.StockGroups).SelectMany(g => g.Stores).ToList();

http://blogs.interknowlogy.com/2008/10/10/use-linqs-selectmany-method-to-flatten-collections/