跨多个多对多关系的 EF6 查询

EF6 Query across multiple many-to-many relationships

我有一个组模型,它与其他两个模型存在多对多关系。这里先放个简化代码帮助解释:

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 之间创建了多对多关系。这又创建了两个连接 tables.

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

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

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

我如何重写它以组合 StockGroups 给我一个 Stores 集合?

谢谢!

您可以使用 SelectMany() 来展平层次结构:

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/