使用linq在相关表中选择Entity属性

时间:2018-10-04 15:10:15

标签: c# linq

这是我的设置。

基本模型

public class Base
{
    public int BaseID { get; set; }
    [StringLength(8)]
    [Index(IsUnique = true)]
    public string BaseNumber { get; set; }
    public ICollection<BillOfMaterial> billOfMaterials { get; set; }
}

物料清单模型

public class BillOfMaterial
{
    public int BillOfMaterialID { get; set; }
    [StringLength(10)]
    [Index(IsUnique = true)]
    public string BomNumber { get; set; }
    public ICollection<Base> Bases { get; set; }
}

我要尝试的是选择所有基数等于输入基数的物料清单BomNumbers。

我尝试过的事情

BaseNumber = "A1C1D001";

var BOMQuery = (from Base in db.Bases.Include("BillOfMaterials")
                where Base.BaseNumber == BaseNumber
                select Base.billOfMaterials.ToList());

尝试创建此查询时,当我执行=>选择Base.BillOfMaterials时,看不到BomNumber属性。(找不到属性)

我尝试使用.include()扩展名尝试引入相关表,希望它将给我该属性。不知道如何确切地表达这个问题,以使谷歌搜索一个好的答案。我在这里做错了什么?任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:2)

当您只需要BOM表列表时,请执行以下操作:

var BOMQuery = db.Bases
              .Where(x => x.BaseNumber == BaseNumber)
              .SelectMany(a => a.billOfMaterials.Select(b => b.BomNumber)).ToList();

然后您可以像这样将其添加到ObservableCollection中:

BomList = new ObservableCollection<string>(BOMQuery);