如何编写这个 Linq-to-SQL 选择查询
Posted
技术标签:
【中文标题】如何编写这个 Linq-to-SQL 选择查询【英文标题】:How to write this Linq-to-SQL select query 【发布时间】:2010-05-25 18:12:08 【问题描述】:我有 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 传递给它,然后只返回 contact.company_id == subcontract.company_id
或 contact.company_id ==
子 ID 之一的联系人。
【问题讨论】:
【参考方案1】: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】: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);
【讨论】:
以上是关于如何编写这个 Linq-to-SQL 选择查询的主要内容,如果未能解决你的问题,请参考以下文章