2010-07-26 54 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