2010-07-26 45 views
1

我對EF4和npgsql提供程序的多對多關係有問題。EF4,Npgsql,M:M關係,「該方法或操作未實現」。 :/

我有3個表:Order,OrderStatus和OrderStatusDict(字典)。 OrderStatus是某種更改日誌 - 每個訂單的狀態更改都會添加到OrderStatus表中,並顯示其實際日期和新狀態。 我需要把所有的訂單,這status.OrderStatusDict.OrderStatusName == 「待定」,所以IM這樣做是這樣的:

var lst = (from o in db.Order 
      where o.OrderStatus 
         .OrderByDescending(s => s.Date) 
         .FirstOrDefault() 
         .OrdereStatusDict.OrderStatusName == "Pending"   
      select o).ToList(); 

我得到一個異常:

出錯同時準備 命令定義。有關詳細信息,請參閱內部 例外。 數據:{} System.Collections.ListDictionaryInternal內 異常:{ 「的方法或 操作未實現。」}

它看起來是OrderByDescending殺死我的查詢,因爲如果我評論

.OrderByDescending(s => s.Date) 

一切工作正常,但我從數據庫中得到最古老的OrderStatus:/

你能幫助我嗎?這是提供者的原因還是EF問題?你有什麼想法可以通過其他方式獲得?

回答

0

我不會那樣寫查詢。

嘗試:

var lst = (from o in db.Order 
      let maxDate = o.OrderStatus.Max(s => s.Date) 
      where o.OrderStatus.Any(s => s.Date == MaxDate 
             && s.OrdereStatusDict.OrderStatusName.Equals("Pending", StringComparison.OrdinalIgnoreCase)) 
      select o).ToList(); 

我猜狀態比較應該是不區分大小寫。

請注意,如果最大日期不唯一,我的查詢的行爲與您的行爲不同。我猜這是獨一無二的,或者我的方式是對的。

+0

感謝克雷格,我保存了幾個小時的工作:)我非常感謝你的幫助! – veeroo 2010-07-27 07:49:46