2010-06-14 39 views
0

這應該是非常簡單的,但我無法弄清楚。Silverlight RIA域名服務。我如何簡單地獲得實體集合?

我可以將數據綁定到這樣下方的數據網格...

變種上下文=新DishViewDomainContext();

this.dataGrid1.ItemsSource = context.Restaurants;

context.Load(context.GetRestaurantsQuery());

。這工作...但現在我只想要在一個變量,我可以通過收集循環該集合...這似乎不可能..我這樣做,那裏似乎沒有什麼...我不知道什麼是第三行確實..它運行域服務方法,但它在哪裏填寫數據?

 var dc = new DomainService1(); 
     IEnumerable<ApplicationLog> collApplicationLog = dc.ApplicationLogs; 
     dc.Load(dc.GetApplicationLogsQuery()); 

     foreach (ApplicationLog al in collApplicationLog) 
     { 
      int? i = al.ApplicationID; 
     } 
+0

這一切都基於這篇文章。 http://ajax.sys-con.com/node/1195515 – punkouter 2010-06-14 21:29:00

回答

0

嘗試dc.Load以下

var collApplicationLog = dc.ApplicationLogs.ToList(); 
+0

ApplicationLogs是類型EntitySet 所以沒有ToList(); – punkouter 2010-06-14 21:27:21

0

調用(...)是一個異步網絡操作。該調用立即返回,但它應該加載的數據直到稍後才能使用。

dc.Load(...)的返回值是一個LoadOperation對象,它有一個Completed事件。您需要將事件處理程序添加到Completed事件中,以便在數據加載並且可以使用IEnumerable時通知您。

原因如下:僅使用IEnumerable,您將無法知道數據何時到達。您從中提取IEnumerable的EntitySet也實現INotifyCollectionChanged。這就是XAML數據綁定到IEnumerable的原理 - 數據綁定發現數據何時到達,因爲它監聽集合已更改的通知,然後它會從枚舉中提取數據。

您的foreach循環不會等待數據到達。

相關問題