LINQ to Entities 是否支持“where”子句谓词中的 IEquatable?

2024-05-20

我有一个名为 EntityBase 的简单基本实体类型,它实现 IEquatable

我在 LINQ to Entities 之外使用了此代码(使用EF http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework4.1) 使用谓词 where 子句过滤从 EntityBase 派生的类型列表,该谓词比较对象实例而不是它们从 EntityBase 继承的 ID 属性。所以基本上我想这样做:

UserAccount account = GetMyNewAccount();
Accounts.Where(item => item == account).SingleOrDefault();

而不是这个:

UserAccount account = GetMyNewAccount();
Accounts.Where(item => item.Id == account.Id).SingleOrDefault();

不幸的是,EF 4.1,特别是 LINQ to Entities 会引发异常:

无法创建“EFTest.UserAccount”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。

这是否意味着我们无法在 Entity Framework 4.1 中执行简单的对象比较谓词,或者我的 IEquatable 实现在某种程度上是错误的?

P.S.:这是 IEquatable 代码:

public class EntityBase : IEntityBase, IEquatable<EntityBase>
{
    public int Id { get; protected set; }

    #region IEquatable<EntityBase> Members

    public override bool Equals(object obj)
    {
        return Equals(obj as EntityBase);
    }

    public bool Equals(EntityBase other)
    {
        if (ReferenceEquals(other, null))
        {
            return false;
        }

        if (ReferenceEquals(this, other))
        {
            return true;
        }

        if (GetType() != other.GetType())
        {
            return false;
        }

        return Id.Equals(other.Id);
    }

    public override int GetHashCode()
    {
        return Id.GetHashCode();
    }

    public static bool operator ==(EntityBase a, EntityBase b)
    {
        if (ReferenceEquals(a, null) && ReferenceEquals(b, null))
        {
            return true;
        }

        if (ReferenceEquals(a, null) || ReferenceEquals(b, null))
        {
            return false;
        }

        return a.Equals(b);
    }

    public static bool operator !=(EntityBase a, EntityBase b)
    {
        return !(a == b);
    }

    #endregion
}

不,不。您传递到实体框架 linq 查询的 C# 表达式永远不会“按原样”执行,而是对表达式树进行求值并将其转换为 SQL 语句。

看着你的IEquatable实施,它不可能起作用 -Object.ReferenceEquals() and GetType()无法转成SQL语句..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ to Entities 是否支持“where”子句谓词中的 IEquatable? 的相关文章

随机推荐

  • Swift 中具有透明背景的按钮边框

    我怎样才能做一个UIButton边框看起来像下图 入门 按钮一样具有透明背景吗 我应该如何使用情节提要来实现这一点 或者如何以编程方式实现这一点 设置backgroundColor to clearColor使按钮透明 例如尝试下面的代码
  • 在 Go 中,如何将结构体转换为字节数组?

    我有一个我定义的结构实例 我想将其转换为字节数组 我尝试了 byte my struct 但这不起作用 另外 我还被指出二进制包 http golang org pkg encoding binary 但我不确定我应该使用哪个函数以及应该如
  • 条件触发器的Django迁移sql

    我想创建一个触发器 仅在满足条件时插入表 我尝试过使用 IF BEGIN END 和 WHERE 的各种组合 但 Django 每次都会返回 SQL 语法错误 这里 type user id指的是触发该事件的人 user id指的是接收到通
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 4 级订阅嵌套在流星中

    我正在使用流星 这是我的架构 每个都是一个单独的集合 课程有很多讲座 讲座有很多问题 问题有很多答案 我想要一页可以显示给定课程的讲座 问题和答案 我可以毫无问题地显示课程的讲座 但在显示更多嵌套项目时遇到问题 我理想地希望拥有 讲座有 c
  • 更改 Sublime Text 2 中的“下一个文件”和“上一个文件”快捷方式

    我没有运气改变 Sublime 中切换文件的键绑定 有人知道这笔交易在这里吗 我想要实现的只是 cmd 和 cmd 显示下一个和上一个文件 然后我可以使用 tab 和 shift tab 进行所有缩进 keys super command
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 使用 msbuild 复制所有文件和文件夹

    只是想知道是否有人可以帮助我编写一些我正在尝试编写的 msbuild 脚本 我想要做的是使用 msbuild 将所有文件和子文件夹从一个文件夹复制到另一个文件夹 ProjectName gt Source gt Tools gt Viewe
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • Objective C 如何将文本字段添加到导航栏中

    我正在尝试将文本字段添加到导航栏中 但它没有显示在模拟器中 我在 viewdidload 中按如下方式执行 UITextView textField UITextView alloc initWithFrame CGRectMake 0 0
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 如何在 C++ 上检查某个键是否被按下

    我怎样才能检查 Windows 上是否按下了某个键 正如其他人提到的 没有跨平台的方法可以做到这一点 但在 Windows 上你可以这样做 下面的代码检查 A 键是否按下 if GetKeyState A 0x8000 Check if h
  • 使用 Sequelize 实现单表继承

    有没有办法使用sequelize来创建单表继承 我希望有一个用于购买和 PartialPurchase 模型的 STI 其中我将有一个类型字段 该字段为 Purchase 或 PartialPurchase 以及类 Purchasing 和
  • 如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统

    我对一般指标尤其是微米很陌生 所以这可能是一个愚蠢的问题 千分尺在其上描述了自己主页 https micrometer io 作为 外观 没有供应商锁定 想想 SLF4J 但为了指标 具有 对 Netflix Atlas 的内置支持 这do
  • 使用 CognitoIdentityServiceProvider 的 adminCreateUser 方法的 AWS Lambda 函数突然失败

    在过去的几天里 我一直在使用 AWS Lambda 函数测试特定流程 并且在 Cognito 用户池中预注册后触发的 lambda 函数工作正常并很好地返回回调函数 但从昨天开始我就看到了以下错误 ntime node modules aw
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • LINQ to Entities 是否支持“where”子句谓词中的 IEquatable?

    我有一个名为 EntityBase 的简单基本实体类型 它实现 IEquatable 我在 LINQ to Entities 之外使用了此代码 使用EF http en wikipedia org wiki ADO NET Entity F