Linq Query для массива объектов - PullRequest
1 голос
/ 23 ноября 2011

У меня есть массив объектов SomeObjects [] объектов.Эти «объекты» могут содержать тип «Сотрудник», «Клиент» или что-то еще.Я хотел написать запрос linq, если «объекты» содержат тип «Сотрудник» и если его имя (Employee.Name) - «Джон», я хочу получить employeeid.

Возможно ли это?*

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Да. Вы можете использовать оператор безопасного приведения as в своем запросе, чтобы найти объекты определенного типа и привести их к этому типу:

var employees = from obj in objects
                let emp = obj as Employee
                where emp != null && emp.Name == "John"
                select emp;
1 голос
/ 23 ноября 2011

Используйте метод OfType для фильтрации объектов по их типу, затем используйте метод Where для фильтрации по имени:

var query = objects.OfType<Employee>()
                   .Where(e => e.Name == "John")
                   .Select(e => e.EmployeeId);

Это вернет идентификаторы сотрудников для всех сотрудников с именем «Джон».Если вы ожидаете, что только один человек будет соответствовать этим критериям, вы можете заменить метод Where на Single, или если вы хотите получить первый результат, используйте First.Однако, если вы ожидаете одного человека, но не знаете, существует ли он, вы можете использовать SingleOrDefault:

Employee result = objects.OfType<Employee>()
                         .SingleOrDefault(e => e.Name == "John");
if (result != null)
{
    Console.WriteLine(result.EmployeeId);
}
...