假设我有一张公司表格,一张雇员表格,而雇员表格的公司表格中有一张FK列表。查询公司并退还相关员工非常容易。LINQ中的筛选器相关表格
var companies = from c in Companies
select c;
通过添加where
子句来过滤这些公司非常容易。但是,我如何过滤上述查询中返回的员工。例如,只包括那些雇员列在真实的雇员?
我想退回所有公司,只有当前雇用的员工。
假设我有一张公司表格,一张雇员表格,而雇员表格的公司表格中有一张FK列表。查询公司并退还相关员工非常容易。LINQ中的筛选器相关表格
var companies = from c in Companies
select c;
通过添加where
子句来过滤这些公司非常容易。但是,我如何过滤上述查询中返回的员工。例如,只包括那些雇员列在真实的雇员?
我想退回所有公司,只有当前雇用的员工。
要检索利用它们的公司及其员工:
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);
}
}
最后,您可以修改为您的生成的部分类数据对象:
public partial class Customer
{
public IEnumerable<Employee> CurrentEmployees
{
get { return this.Employees.Where(e => e.Employed);
}
}
谢谢,这很接近。但我不想过滤这些公司。只是员工。 – 2011-06-09 23:26:15
就像加入公司和员工检索那些被雇用的人一样? – user7116 2011-06-09 23:27:25
对不起,我没有完全遵循。我想退回所有公司,只包括那些受雇的相关员工。我对此很新,但我知道加入是为我自动完成的。我能否以某种方式将自动连接替换为自定义连接? – 2011-06-09 23:29:49
我不知道你想与员工做什么,但在这里是通过他们迭代的方式:
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
}
}
这不会很有效,因为'公司'不会有'员工'属性。 – StriplingWarrior 2011-06-09 23:32:04
谢谢,修正中编辑。 – ChessWhiz 2011-06-09 23:33:42
使用查询语法:
var companies = from c in Companies
from e in c.Employees
where e.Employed
select c;
您提供的示例不返回相关员工。 – StriplingWarrior 2011-06-09 23:30:04
@StriplingWarrior:怎么样?我的例子实际上是组成的,并不反映我真实的代码。但它会返回真实代码中的相关数据。 – 2011-06-10 03:38:02
因为这不会明确加载公司的员工,所以在对此查询进行评估时,它不会将它们加载到内存中。如果你遍历'companies',然后访问他们的'Employees'属性,你会懒洋洋地在同一时间,这将耗费大量的数据库往返加载一个员工的每一批。 – StriplingWarrior 2011-06-10 04:09:18