2012-05-17 41 views
0

是否可以使用實體框架將數據庫實體的集合分配給ObservableCollection?如何通過EF LINQ語句分配Observable集合

這是什麼iv嘗試到目前爲止 我嘗試使用構造函數將列表轉換爲ObsrvableCollection ..但LINQ不允許接受參數的構造函數。

爲Ienumerable創建一個名爲ToObservable集合的擴展..但是EF不能識別這個。

有沒有其他優雅的解決方案呢。 下面給出的是我使用的代碼...和失敗

using (var db = new clientEntities()) 
{ 
       var data = from p in db.CLIENTs 
          select new Contracts.Client() 
             { 
              ClientID = p.CLIENT_ID, 
              FirstName = p.FIRST_NAME,           
              PayInfo = new ObservableCollection<PayInfo>(p.PAY_INFO.Select(n=> new PaymentInfo(){ 
               PayID=n.ID              
               })) 
             }; 
    } 

的PayInfofield是一個觀察的集合。是否可以優雅地分配它而不使用臨時變量。

回答

2

這聽起來像你混淆了LINQ to Entities/SQL與普通的LINQ。請記住,當您使用EF時,您編寫的任何LINQ查詢都必須轉換爲SQL。因此,無論從SQL數據庫返回的數據需要做什麼對象轉換,都需要EF直接支持。這包括ToList(),ToArray()等,但不包括您自己的自定義擴展。我認爲你可以在這裏做的最好的首先是查詢數據庫(你可以使用ToList()使查詢執行),然後在ObservableCollection的構造函數中使用結果列表(或者調用ToObservableCollection()擴展方法。

+0

謝謝...但我的問題是有點不同......我知道我能做到這一切... 我希望有一個乾淨的方式來做到這一點... ü提示參與收集存儲到該解決方案一個列表,然後將它移動到一個可觀察的集合中,這意味着我的合同中有兩個屬性......或者另一個類與Contracts.Client具有完全相同的屬性,我正在尋找一種方法來避免這種情況 – Mulki