2011-11-22 172 views
1

我有對象數組SomeObject []對象。這個「對象」可能包含「員工」,「客戶」或其他類型。如果'objects'包含'Employee'類型,並且他的名字(Employee.Name)是'John',我想獲得employeeid,我想寫一個linq查詢。Linq查詢對象數組

可能嗎?

回答

2

是。您可以在查詢中使用安全演員操作員as查找特定類型的對象並將它們轉換爲該類型:

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

使用OfType method根據其類型來過濾對象,然後使用Where method對名稱進行篩選:

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

這將返回員工ID與名全體員工本着「約翰」。如果您希望只有一個人符合該條件,則可以用Single代替Where方法,或者如果要採用第一個結果使用First。但是,如果你指望一個人,但不知道他們是否存在,你需要使用SingleOrDefault

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