如何编写这个Linq-to-SQL选择查询

时间:2010-05-25 18:12:08

标签: linq linq-to-sql select

我有3个表:分包合同,公司和联系人。每个表都有一个active_status标志,表明该项仍​​处于活动状态(尚未删除)。

  • 每个联系人都有一个company_id字段,用于存储联系人公司的ID。
  • 每个转包都有一个company_id字段,用于存储转包公司。
  • 每家公司都有一个company_id字段,其中包含guid和一个primary_company字段,b / c该公司可能是一个子公司。如果它是子公司,则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,然后只返回其中一个辅助ID contact.company_id == subcontract.company_idcontact.company_id ==的联系人。

2 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分: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);
}