我需要創建一個預先加載查詢,將執行以下任務:通過ID 如何寫熱切許多加載查詢與額外的過濾許多關係和排序
- 獲取父實體實體的通過標準
- 排序子列表
我不急於查詢看起來是這樣的:
var company = _dbContext.Companies.FirstOrDefault(c => c.Id == companyId);
if (company != null)
{
company.CompanyProducts =
company.CompanyProducts
.Where(cp => cp.IsBuyable && cp.Product.IsPublished)
.OrderByDescending(c => c.Product.PublishDate)
.ThenBy(c => c.Product.Name)
.ToList();
}
return company;
如果實體有這樣的結構:
public class Company
{
public long Id { get; set; }
public string Name { get; set; }
[ForeignKey("CompanyId")]
public virtual ICollection<CompanyProduct> CompanyProducts { get; set; }
}
public class CompanyProdcut
{
public long Id { get; set; }
public long CompanyId { get; set; }
public long ProductId { get; set; }
public bool IsBuyable { get; set; }
public virtual Company Company { get; set; }
public virtual Product Product { get; set; }
}
public class Product
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime PublishDate { get; set; }
public bool IsPublished { get; set; }
[ForeignKey("ProductId")]
public virtual ICollection<CompanyProduct> CompanyProducts { get; set; }
}
public class MyDbContext : DbContext
{
public MyDbContext() : base("name=connectionString")
{
Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
}
public virtual IDbSet<Product> Products { get; set; }
public virtual IDbSet<Company> Companies { get; set; }
public virtual IDbSet<CompanyProduct> CompanyProducts { get; set; }
}
這是許多經典到使用實體中間存儲addtional數據一對多的關係。
Company -|---------|<CompanyProduct>|---------|- Product
如何在這種情況下,我可以重寫不急於查詢急於查詢,將在一個SQL調用所做的一切?我試圖自己使用。包括()但我失敗了。
任何想法?
我不知道你做錯了什麼,但根據EF文件'.INCLUDE()'是你Eargerly負載的東西怎麼樣。對你而言,你應該在查詢中使用'... .ThenBy(c => c.Product.Name).Include(「Company」).include(「Product」)。ToList();'see here https:/ /msdn.microsoft.com/en-nz/data/jj574232.aspx – Toxicable
@Avangar那麼什麼是錯的,company.CompanyProducts = company.CompanyProducts .Include(x => x.Company).Include(x => x.Product) 。凡(CP => cp.IsBuyable && cp.Product.IsPublished)) .OrderByDescending(C => c.Product.PublishDate) .ThenBy(C => c.Product.Name) 。 ToList();? – IdahoSixString
@Avanger基於您向我們展示的內容。我假設這是一個代碼第一次安裝?如果是這樣,你能告訴我們你的上下文的構造函數嗎? – IdahoSixString