2010-08-25 72 views
0

我有一個集合IEnumerable。在LINQ查詢中,我希望只從T類中選擇此集合中的屬性,並將其轉換爲匿名類型,其中T是POCO業務對象。從實體動態選擇屬性列表

例如:

我的IEnumerable包含屬性「Name」,「Age」。

我的POCO是:

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Address { get; set; } 
    public string Phone { get; set; } 
} 

我想實現如下效果相同,但沒有硬編碼的匿名類型的成員,而是用我的PropertyInfo集合。

IEnumerable<Person> peeps = GetPeople(); 
var names = from p in peeps 
      select new {Name = p.Name, Age = p.Age}; 

如果我使用實體框架,我可以用Entity SQL動態構建的字符串where條款,但後來雖然沒有嚴格的硬編碼,我仍然使用屬性的字符串名稱。

ADDED: 會不也許動態地構造爲用於確定哪些屬性包含在結果對象中的。選擇投影方法的表達?

回答

0

你不能那樣做。編譯器需要知道枚舉中物品的靜態類型,即使它是一個匿名類型(var關鍵字表示隱含打字,不動態打字)

爲什麼你需要做的是什麼?如果你解釋你的要求是什麼,我們可以建議另一種方法來做到這一點

+0

我正在導出一個JobCard對象的集合。要包含在對象的CSV表示中的每個對象的屬性取決於用戶角色。此刻,我只是循環查看包含角色和用戶反射的屬性列表,以從每個JobCard對象獲取其值。 我只用'var'作爲例子。我可能不會使用'動態'嗎?但我對此一無所知。在這種情況下, – ProfK 2010-08-25 13:13:41

+0

動態無助。我認爲反射是你唯一的選擇... – 2010-08-25 14:55:24

+0

請看我的編輯。我知道我說過「在LINQ查詢中」,但僅僅爲了興趣,動態屬性集的限制依賴於平臺,可以使用實體框架來實現。 – ProfK 2010-08-25 15:34:01