Как записать этот запрос Select Linq-SQL

У меня есть 3 таблицы: субдоговоры, компании и контакты. Каждая таблица имеет active_status флаги, который показывает, что объект все еще активен (не был удален).

  • Каждый контакт имеет company_id поле, которое хранит идентификатор компании контакта.
  • Каждый субдоговор имеет company_id поле, которое хранит компанию субдоговора.
  • Каждая компания имеет company_id поле, которое содержит его гуид, и primary_company поле, b/c компания могло быть филиалом. Если это - филиал, primary_company поле содержит идентификатор основной компании.

У меня есть форма субдоговора. На форме у меня есть выпадающий из контактов, которые хранятся в таблице контакта. В настоящее время выпадающие списки все контакты. Я хотел бы иметь выпадающее, только перечисляют контакты, которые принадлежат компании субдоговора или любому из филиалов той компании.

У меня есть следующий запрос, который я использую в другом месте в программе, чтобы передать 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;
}

То, что я должен сделать, передать его субдоговор company_id и затем только возвратить контакты где contact.company_id == subcontract.company_id или contact.company_id == один из вспомогательных идентификаторов.

1
задан marc_s 25 May 2010 в 20:22
поделиться

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

}
2
ответ дан 3 September 2019 в 00:18
поделиться
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);
}
0
ответ дан 3 September 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: