我有一些对象SomeObjects []对象。这些“对象”可能包含“员工”,“客户”或其他类型。我想写一个linq查询,如果'objects'包含'Employee'类型,如果他的名字(Employee.Name)是'John',我想得到employeeid。
有可能吗?
答案 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);
}