我有这些(简化的)模型:
class Vendor
{
public int Id { get; set; }
public IEnumerable<Product> Products { get; set; }
public IEnumerable<Booth> Booths { get; set; }
}
class Show
{
public int Id { get; set; }
public IEnumerable<Booth> Booths { get; set; }
}
class Booth
{
public int VendorId { get; set; }
public Vendor Vendor { get; set; }
public int ShowId { get; set; }
public Show Show { get; set; }
}
class Product
{
public int Id { get; set; }
public int VendorId { get; set; }
public IEnumerable<ProductPic> Pics { get; set; }
}
class ProductPic
{
public int Id { get; set; }
public int ProductId { get; set; }
public string Uri { get; set; }
}
我不在乎我是否使用 LINQ 或
IEnumerable<Vendor> vendorsWithProductsAndPicsInShow = db_.Vendors.SqlQuery(sql).AsEnumerable();
我只希望结果是供应商列表,以及他们的产品和特定节目中的产品图片。
我正在尝试通过查询展位来解决这个问题,例如
Vendor[] vendorsInShow = (from b in db_.Booths
.Include(m => m.Vendor)
.Include(m => m.Vendor.Products)
.Where(m => m.ShowId == showId && m.Vendor.Products.Count > 0)
select b.Vendor).AsNoTracking().ToArray();
但该查询最终不包括产品,我仍然需要检索每个产品的 ProductPics。
我需要在这里做什么?
您可以尝试从供应商中进行选择并使用Any()进行ShowId。
Vendor[] vendorsInShow = (from v in db_.Vendor
.Include("Products.Pics")
.Where(m => m.Booths.Any(a => a.ShowID == showId)
&& m.Products.Count > 0)
select v).AsNoTracking().ToArray();