2016-08-13 63 views
2

我有我的實體列表,我使用Select從我的實體獲取一些屬性。我的實體有一個PrimaryContact屬性,這有一個LastName屬性。所以,如果我用這樣它的正常工作c#從lambda表達式列表中選擇

var b = items.Select(s => s[PropertyName]); //Property name is "PrimaryContact" it's fine. 

,但如果我使用"PrimaryContact.LastName"這是行不通的

var x = items.Select(s => s[PropertyName]); //Property name is "PrimaryContact.LastName" it's not working 

PropertyName可能是evrything: 「PrimaryContact.LastName」, 「PrimaryContact.FirstName」,「 PrimaryContact.Address.City「

請問有人可以幫我。

+0

問題更新 –

+0

是不是解決方案的任何工作? – Mostafiz

+0

它只適用於PrimaryContact.LastName –

回答

0

試試這個,

var x = items.Select(s => s["PrimaryContact"].LastName); 
+0

不幸的是,這將不會編譯,因爲'選擇'將返回'IEnumerable '而不是一個 - 所以你不能]'t'.LastName' –

+0

也你的代碼已經格式化問題 – Mostafiz

+0

@GiladGreen同意 – Sajeetharan

0

如果你只想要一個項目LastName然後

var x = items.Select(s => s["PrimaryContact"]).FirstOrDefault().LastName; 

如果你想所有項目Lastname作爲集合然後

var x = items.Select(s => s["PrimaryContact"].LastName); 

如果你希望所有然後首先選擇屬性然後遍歷它

ar x = items.Select(s => s["PrimaryContact"]); 

foreach(var p in x) 
{ 
    // P.FirstName 
    // p.LastName 
    // p.Address.City 
} 
+0

感謝您的幫助,但我不't認爲這是最好的方式 –

+0

爲什麼我不能使用var x = items.Select(s => s [「PrimaryContact.LastName」]); –

+0

因爲看起來'PrimaryContact.LastName'不是收集姓氏的單個實體,而是'PrimaryContact'是集合,所以你可以使用linq來選擇它們,但爲什麼你這樣做我的解決方案不是最好的方式? – Mostafiz

0

Select回報IEnumerable所以如果你想所有的LastName S IN items然後:

var b = items.Select(s => s["PrimaryContact"].LastName); 

否則,如果你只想要其中一人之後再把Select使用FirstOrDefault

var b = items.Select(s => s["PrimaryContact"]).FirstOrDefault().LastName; 
+0

我更新了我的問題 –