Linq查询对象数组

时间:2011-11-22 20:06:21

标签: linq-to-objects

我有一些对象SomeObjects []对象。这些“对象”可能包含“员工”,“客户”或其他类型。我想写一个linq查询,如果'objects'包含'Employee'类型,如果他的名字(Employee.Name)是'John',我想得到employeeid。

有可能吗?

2 个答案:

答案 0 :(得分:2)

是。您可以在查询中使用安全强制转换运算符as运算符来查找特定类型的对象,并将它们强制转换为该类型:

var employees = from obj in objects
                let emp = obj as Employee
                where emp != null && emp.Name == "John"
                select emp;

答案 1 :(得分:1)

使用OfType method根据类型过滤对象,然后使用Where method过滤名称:

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

这将返回名为“John”的所有员工的员工ID。如果您只希望一个人符合该条件,则可以将Where方法替换为Single,或者如果您想使用First取得第一个结果。但是,如果您期望一个人但不知道他们是否存在,那么您将需要使用SingleOrDefault

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