2011-12-06 145 views
7

我有一個保存動態類型對象的列表。當我使用LINQ OrderBy方法時,出現錯誤,說'對象'不包含'日期'的定義。我可以做些什麼來按日期排序我的列表?如何使用動態對象對列表進行排序

List<dynamic> employees = new List<dynamic>(); 

employees.Add(new 
{ 
    ID = 1, 
    Name = "Larry", 
    Date = new DateTime(2010, 10, 1), 
}); 

employees.Add(new 
{ 
    ID = 2, 
    Name = "Clint", 
    Date = new DateTime(2011, 5, 28), 
}); 

employees.Add(new 
{ 
    ID = 3, 
    Name = "Jason", 
    Date = new DateTime(2011, 7, 6), 
}); 

var query = employees.OrderBy(x => x.Date); 
+0

也許帶反射? – Nate

+0

你是說lambda表達式不支持動態? – zmbq

+0

在LinqPad中,它執行並運行良好。 – okrumnow

回答

6

是你在同一個Assembly中顯示的代碼嗎?

匿名類型不會跨越組件工作,「對象不包含此定義」錯誤是從兩個不同的組件

(例如,使用匿名類型的典型標誌,在ASP.net MVC頁面控制器可能會返回一個匿名類型作爲模型,視圖可能會嘗試使用它=>正好與該錯誤一起爆炸)

+0

確實代碼在另一個程序集中。我發佈的代碼就是一個例子。知道它不能在組件中工作,我可以修改創建動態對象列表的代碼,按日期排序,然後將排序後的列表傳遞給消耗程序集。謝謝(你的)信息! – Halcyon

+0

@Halcyon酷。問題是,anon類型是內部的。有一些黑客將他們包裝在一個動態的組織中,這樣他們就可以跨組件工作,但確實最好重新構建解決方案。 –

3

我驗證了您的查詢在.NET 4.0中的工作原理。您是否錯過了您的裝配中對Microsoft.CSharp的引用?

相關問題