假設我有一張公司表格,一張僱員表格,而僱員表格的公司表格中有一張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