2013-06-26 20 views
0
動態匿名類型Select語句
//list is IEnumeable NOT IEnumerable<T> 

var IEnumerable<object> = list.AsQueryable().Cast<object>().Select(x=> .........); 

對象實際上有一個POCO底層匿名類如建立使用LINQ

AccountId,Name,SecretInfo 

我理想中的SELECT語句

AccountId = x.GetType().GetProperty("AccountId").GetValue(x,null), 
Name = x.GetType().GetProperty("Name").GetValue(x,null) 

此外,我想隱藏我可以作爲硬編碼字符串傳遞的SecretInfo列「SecretInfo」 基本上,選擇列表需要在Anonymous類型上動態構建.... 如何做到這一點....任何Linq玩家都可以幫助我?

+0

您是否知道匿名類仍然是強類型?爲什麼列表IEnumerable而不是IEnumerable ? – TGlatzer

+0

我使用IEnumerable是因爲它的通用性和我無法更改它 chugh97

+0

什麼是您的數據源,這使得不可能?我幾乎無法想象那些無法使用強打字的情況(除了Interop) – TGlatzer

回答

0

您的問題的答案依賴於anonymous types。下面的代碼是您可以使用的:

var result = list.AsQueryable().Cast<Info>().Select(x => new 
    { 
     AccountId = x.AccountId, 
     Name = x.Name 
    }); 

跟隨在SELECT語句中的新關鍵詞的括號,你正在創建一個匿名類型,將有兩個隱式類型的只讀域(帳戶和名稱) 。希望這可以幫助!

我想從鏈接(無雙關語意)文章發佈此引用:

匿名類型典型地查詢表達式的選擇子句中用於從每個對象返回的屬性的一個子集在源序列中。有關查詢的更多信息,請參閱LINQ Query Expressions (C# Programming Guide)

+0

爲什麼downvote?我發佈的一切都是真實的和適用的。 –