我在理解Linq和EF如何返回数据时遇到了问题。我有三个简单的课程
产品, 材料, 文件
产品由材料和材料组成,有文件。当我加载产品时,我想返回产品所用材料的所有文档。
以下是我的课程:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
...
public ICollection<ProductMaterials> ProductMaterial { get; set; }
}
public class ProductMaterials
{
public int Id { get; set; }
public int ProductId { get; set; }
public Product Product { get; set; }
public int MaterialId { get; set; }
public Materials Material { get; set; }
...
}
public class Document
{
public int Id { get; set; }
public string Name { get; set; }
...
public ICollection<MaterialDocument> MaterialDocument { get; set; }
}
public class MaterialDocument
{
public int Id { get; set; }
public int MaterialId { get; set; }
public Materials Material { get; set; }
public int DocumentId { get; set; }
public Document Document { get; set; }
}
我在加载材料及其相关文档时没有任何问题。我使用这个查询:
var materialDocuments = db.MaterialDocuments
.Include("Document")
.Where(i => i.MaterialId == id)
.ToList();
如何使用相关材料和材料文档加载产品?我是否需要指向ProductMaterials的MaterialDocument类的其他导航属性?
答案 0 :(得分:1)
要返回您正在加载的特定Document
的所有Product
条记录(请提供我们称之为myProductID
的ID),只需执行以下操作:
var product = db.Products.Find(myProductID); //The product that you're loading
var documents = product.ProductMaterials.SelectMany(pm =>
pm.Material.SelectMany(mat =>
mat.MaterialDocuments.Select(matdoc => matdoc.Document)));