我有一个与其他两个模型有多对多关系的组模型。这是一个简化的代码,首先帮助解释:
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给我一个商店的集合?
谢谢!
答案 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/