问题描述
|
假设我有一个公司表,一个雇员表,并且雇员表有一个到公司表的FK列。查询公司并返回相关员工非常容易。
var companies = from c in Companies
select c;
通过添加where
子句来过滤这些公司非常容易。但是如何过滤上面查询中返回的员工。例如,仅包括那些Employed列为true的员工?
我想归还所有公司,只保留那些目前受雇的员工。
解决方法
检索受雇的公司及其雇员:
var companies = from c in Companies
select new
{
Company = c,EmployedPersons = c.Employees.Where(e => e.Employed)
};
像这样使用:
foreach (var company in companies)
{
Console.WriteLine(\"{0}\",company.Company);
foreach (var employee in company.EmployedPersons)
{
Console.WriteLine(\"{0}\",employee);
}
}
根据您的评论的另一种方法,您需要在其他地方对此进行过滤:
public void DisplayEmployedPersons(Company company)
{
foreach (var employee in company.Employees.Where(e => e.Employed))
{
Console.WriteLine(\"{0}\",employee);
}
}
最后,您可以修改为您的“ 5”数据对象生成的部分类:
public partial class Customer
{
public IEnumerable<Employee> CurrentEmployees
{
get { return this.Employees.Where(e => e.Employed);
}
}
, 我不确定您想对员工做什么,但这是一种遍历员工的方法:
var companies = from c in Companies
where c.Employees.Any(e => e.Employed)
select c;
foreach (var company in companies) {
foreach (var employee in company.Employees.Where(e => e.Employed)) {
// your employed employees are iterated here
}
}
, 使用查询语法:
var companies = from c in Companies
from e in c.Employees
where e.Employed
select c;