【问题标题】:EF4, Npgsql, M:M relation, "The method or operation is not implemented." :/EF4,Npgsql,M:M 关系,“方法或操作未实现。” :/
【发布时间】:2012-01-05 03:12:41
【问题描述】:

我在 EF4 和 npgsql 提供程序上遇到了多对多关系的问题。

我有 3 个表:Order、OrderStatus 和 OrderStatusDict(字典)。 OrderStatus 是某种 changeLog - 每个订单的状态更改都被添加到 OrderStatus 表中,其中包含其实际日期和新状态。 我需要获取所有订单,其中 status.OrderStatusDict.OrderStatusName == "Pending",所以我这样做:

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)

一切正常,但我从 db 获得了最旧的 OrderStatus :/

你能帮帮我吗?这是提供商的原因还是 EF 问题?你有什么想法我可以通过其他方式获得吗?

【问题讨论】:

    标签: entity-framework linq-to-entities entity-framework-4


    【解决方案1】:

    我不会那样写查询。

    试试:

    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();
    

    我猜状态比较应该不区分大小写。

    请注意,如果最大日期不是唯一的,我的查询行为与您的不同。我猜它要么是独一无二的,要么是我的方式是对的。

    【讨论】:

    • 感谢 Craig,您节省了我几个小时的工作时间:) 非常感谢您的帮助!
    猜你喜欢
    • 2016-04-06
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多