[英]How does FirstOrDefault evaluate an inner FirstOrDefault with a condition?
我有這個問題,無論內部表達式如何評估,FirstOrDefault 總是返回它遇到的第一個項目。
可以說我有很多公司。
Companies = {Company1, Company2, Company3}
..每個公司都包含一組員工姓名。
Company1.EmployeeList = {"Employee1", "Employee2"}
Company2.EmployeeList = {"Employee3", "Employee4"}
Company3.EmployeeList = {"Employee5", "Employee6"}
為什么我總是收到帶有以下代碼的第一家公司?
var myCompany = Companies.FirstOrDefault(c=> c.EmployeeList.FirstOrDefault(name => name == "Employee3") != null);
我運行這段代碼:
string[] s1 = new [] {"Employee1", "Employee2"};
string[] s2 = new [] {"Employee3", "Employee4"};
string[] s3 = new [] {"Employee5", "Employee6"};
string[][] s = new [] { s1,s2,s3 };
var result = s.FirstOrDefault(c => c.FirstOrDefault(n => n == "Employee3") != null);
結果是:
String [] (2 items)
Employee3
Employee4
你的例子沒有說明整個故事嗎?
Company1
在其EmployeeList
Employee3
Employees
實際上不是String
(即==
是否重載或類似) 首先,我建議您將代碼更改為使用Any
而不是FirstOrDefault != null
var myCompany = Companies
.FirstOrDefault(c => c.EmployeeList.Any(name => name == "Employee3"));
我還注意到你 state:
無論內部表達式如何評估,FirstOrDefault 總是返回它遇到的第一個項目
如果是這種情況,要么您以某種方式重載FirstOrDefault
(不太可能),要么您的內部表達式對於您嘗試過的每個示例總是正確的(即在示例中,您的第一個Company
的EmployeeList
有一個元素== "Employee3"
是真的)。
編輯
來自評論的兩個很好的建議:
ingo 建議使用list.Contains(item)
而不是list.Any(el => el == item)
這意味着使用:
var myCo = Companies.FirstOrDefault(c => c.EmployeeList.Contains("Employee3"));
John L 建議EmployeeList
中的項目( Employee
?)是值類型或類似的,因此default(Employee)
不是null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.