2015-06-15 123 views
1

我有這些(簡體)型號:LINQ到實體檢索相關實體或T-SQL

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(); 

我只是想要的結果我不在乎成爲供應商名單,以及他們的產品和productPics在特定的節目。

我試圖通過查詢亭,像

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。

我需要在這裏做什麼?

+0

你想如何塑造數據?作爲供應商的清單,每個供應商都有一系列產品? –

+0

是的,層次結構,但用戶已經給了我一個工作答案,謝謝 –

回答

1

您可以嘗試從供應商處選擇並使用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(); 
+0

作品像一個魅力,感謝一百萬! –