2017-06-17 87 views
0

這裏是我的表(公司)實體框架代碼第一次查詢

Companyid Company_Name ParentCompany_ID 
957   Company1  6211 
4816  Company2  Null 
1922  Company3  7565 
6211  Company4  Null 

這是我的HTML。

   <div class="responsive-table"> 
        <div class="row-width desktop-header">       
         <div class="col-md-5">Company</div> 
         <div class="col-md-5">Parent Company</div> 
        </div> 
        <div class="list-font row" data-ng-repeat="company in vm.companies"> 
         <div class="col-md-2"> 
          <div class="mobile-header">Name:</div> 
         </div>        
         <div class="col-md-5"> 
          <div class="mobile-header">Parent Company:</div> 
         </div> 
        </div> 
       </div> 

我需要從公司表中檢索名稱和母公司名稱。這是我的代碼。

private List<Company> GetCompany() 
    { 
     return dbContext.Companies 
       .Where(p => p.Id == ID)     
       .ToList(); 
    } 

在主函數中我有這樣的事情

List<Company>company = GetCompany(); 
Result = new CompanyModel() 
{ 
    Name = company.Name 
}; 

我有點堅持瞭如何檢索母公司名稱。

編輯:概念是,如果ParentCompany_Id不爲空,那麼它的公司爲companyid的母公司。例如,在表中,957是子公司,6211是母公司。在第二行中,由於ParentCompany_Id爲空,因此4816是母公司。所以,我需要從同一張表中檢索公司名稱和ParentCompany名稱。

+0

作爲回報,您需要獲取母公司ID。在模態類中確實引用具有母公司ID和名稱的表 – geminiousgoel

+0

您想返回一組記錄嗎?或者它是一個網格,你想要返回所有? – Valkyrie

+1

你有代碼優先的方法,只需在課堂上給一對多的關係,你會得到數據。 – geminiousgoel

回答

0
private Company GetCompany() 
{ 
     return dbContext.Companies 
       .Where(p => p.Id == ID)     
       .FirstOrDefault(); 
} 

然後,

string ParentCompanyId = GetCompany().ParentCompany_ID; 
0

你的方法GetCompany應該是Company類型不List<Company>的,因爲它通過Id返回結果,也很方便有id參數方便地調用它:

private static Company GetCompany(id) 
{ 
     if(id == null) return new Company(); 
     var company = dbContext.Companies 
           .SingleOrDefault(p => p.Id == id); 
      return company;  
} 

現在您可以輕鬆創建您的模型:

var company = GetCompany(957); 
var result = new CompanyModel() 
      { 
       Name = company.Name, 
       ParName = GetCompany(company.ParentCompany_ID).Name 
       }; 
+0

這不應該需要兩次到數據庫。 – Crowcoder

+0

然後他可以進行連接查詢並將結果直接投射到模型 –

0

鑑於你的實體可能會包括不僅僅是一個名稱的詳細信息,包括相關的數據等...

public class Company 
{ 
    public int CompanyId { get; set; } 
    public string CompanyName { get; set; } 
    public int? ParentCompanyId { get; set; } 
    [ForeignKey("ParentCompanyId")] 
    public virtual Company ParentCompany { get; set; } 
} 

然後鑑於ID檢索公司....

var company = dbContext.Companies.SingleOrDefault(c=> c.CompanyId == id); 
// where company != null... 

//lazy load the parent... 
var parent = company.ParentCompany; 

//eager load parent with company... 
var company = dbContext.Companies 
    .Where(c => c.CompanyId == id) 
    .Include(c => c.Parent) 
    .SingleOrDefault(); 

// better, if you know the view model you want... 
var viewModel = dbContext.Companies 
    .Where(c => c.CompanyId == id) 
    .Select(c => new CompanyViewModel 
    { 
     c.CompanyId, 
     c.CompanyName, 
     ParentCompanyName = c.ParentCompany != null 
      ? c.ParentCompany.CompanyName 
      : string.Empty 
    }).SingleOrDefault(); 

最後一個例子來自內存,可能需要一些調整,但明確檢索值的好處是它可以最小化通過線路發送的數據。對於小型域對象,不要打擾,但對於較大的複雜對象圖,它可以節省很多性能。

+0

謝謝。它像一個魅力工作! – user7906966