2010-05-25 72 views
1

我有3個表格:分包合同,公司和聯繫人。每個表都有一個active_status標誌,表示該項目仍處於活動狀態(尚未被刪除)。如何編寫此Linq-to-SQL選擇查詢

  • 每個聯繫人都有一個company_id字段,用於存儲聯繫人公司的ID。
  • 每個分包合同都有一個company_id字段,用於存儲轉包商的公司。
  • 每個公司都有一個company_id字段,該字段持有其guid和primary_company字段,該公司可以是子公司。如果它是子公司,則primary_company字段包含主公司的ID。

我有一個轉包形式。在表單上,​​我有一個聯繫人下拉列表,存儲在聯繫人表中。目前下拉列表列出了所有聯繫人。我希望僅列出屬於分包商公司或該公司任何子公司的下拉列表聯繫人。

我有以下查詢,我在程序的其他地方通過一個company_id並獲得其子公司。

public IQueryable<company> GetSubsidiaryCompanies(Guid id) 
{ 
    return 
     from c in db.companies 
     where c.primary_company == id && c.active_status == true 
     select c; 
} 

這是我目前接觸的選擇

public IQueryable<contact> GetContacts() 
{ 
    return 
     from c in db.contacts 
     where c.active_status == true 
     orderby c.contact_name 
     select c; 
} 

我需要做的是通過它的subcontract.company_id,然後只返回聯繫人那裏contact.company_id == subcontract.company_id或子公司IDS的contact.company_id ==之一。

回答

2
public IQueryable<contact> GetContacts(Guid id) 
{ 
    return 
    db.companies 
     .Where(c=>c.active_status == true) 
     .Where(c=>c.primary_company == id || c.company_id == id) 
     .SelectMany(c=>c.contacts); 

} 
0
public IQueryable<contact> GetActiveCompanies(Guid id) 
{ 
    return from c in db.companies 
      where c.active_status == true 
       && (c.primary_company == id || c.company_id == id) 
      select c; 
} 

public IQueryable<contact> GetContacts(Guid id) 
{ 
    return GetActiveCompanies(id) 
      .SelectMany(c=>c.contacts); 
}