Фильтровать связанные таблицы в LINQ - PullRequest
2 голосов
/ 10 июня 2011

Допустим, у меня есть таблица компаний, таблица сотрудников, а таблица сотрудников содержит столбец FK для таблицы компаний.Это очень легко запросить компании и вернуть соответствующих сотрудников.

var companies = from c in Companies
                select c;

Очень легко отфильтровать эти компании, добавив предложение where.Но как я могу отфильтровать сотрудников, возвращенных в запросе выше.Например, чтобы включить только тех сотрудников, для которых в столбце «Занятый» указано значение «true»?

Я хотел бы вернуть все компании, в которых есть только те сотрудники, которые в настоящее время работают.

Ответы [ 3 ]

4 голосов
/ 10 июня 2011

Для поиска компаний и их сотрудников, которые работают:

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

Наконец, вы можете изменить частичный класс, сгенерированный для вашего Customer объекта данных:

public partial class Customer
{
    public IEnumerable<Employee> CurrentEmployees
    {
        get { return this.Employees.Where(e => e.Employed);
    } 
}
3 голосов
/ 10 июня 2011

Я не уверен, что вы хотите делать с сотрудниками, но вот способ перебрать их:

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
    }
}
2 голосов
/ 10 июня 2011

Использование запроса синтаксиса:

var companies = from c in Companies
                from e in c.Employees
                where e.Employed
                select c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...