实体框架 - 荒谬的查询,将smallint转换为int以进行比较[重复]

2023-11-21

这里没有想法了。我有一个简单的表,模型首先与实体框架映射,并生成以下 SQL:

(@p__linq__0 int,@p__linq__1 int)SELECT 
    [Extent1].[BucketRef] AS [BucketRef], 
    [Extent1].[VariantNo] AS [VariantNo], 
    [Extent1].[SliceNo] AS [SliceNo], 
    [Extent1].[TradeNo] AS [TradeNo], 
    [Extent1].[TradeBegin] AS [TradeBegin], 
    [Extent1].[TradeEnd] AS [TradeEnd], 
    FROM [simstg].[Trade] AS [Extent1]
    WHERE ((( CAST( [Extent1].[BucketRef] AS int) = @p__linq__0) AND ( NOT (( CAST( [Extent1].[BucketRef] AS int) IS NULL) OR (@p__linq__0 IS NULL)))) OR (( CAST( [Extent1].[BucketRef] AS int) IS NULL) AND (@p__linq__0 IS NULL))) AND ((( CAST( [Extent1].[VariantNo] AS int) = @p__linq__1) AND ( NOT (( CAST( [Extent1].[VariantNo] AS int) IS NULL) OR (@p__linq__1 IS NULL)))) OR (( CAST( [Extent1].[VariantNo] AS int) IS NULL) AND (@p__linq__1 IS NULL)))

所有这些演员都扼杀了表演。遗憾的是我没能看到它们来自哪里。

有问题的查询是:

var tradesQuery = repository.SimStgTrade
    .Where(x => x.BucketRef == bucketId && x.VariantNo == set)
    .ToArray();

这很简单。字段定义为:bucketId:short(数据库中的smallint),设置short,数据库中的smallint。因此,完全不需要演员阵容。我已经删除并重新创建了模型中的表 - 据我所知,映射匹配(字段为smallint)。因此,我们遇到了严重的性能问题 - 例如:查询超时,因为它不使用表扫描。

有人知道如何摆脱这些演员阵容并强制基于短裤进行比较吗?从 SQL 中可以很明显地看出,EF 决定首先将所有内容移至 int...,这毫无意义。

这不是一个“好不好”的事情。未完成的查询路径完全不同,生成的代码将其转换为自连接。在服务器管理器中,EF 变体需要 5 分钟以上,而使用简单 SQL 的优化版本需要 0.0 秒(返回该表中数十亿行中的 228 行)。


此行为对于不同的 LINQ 提供程序来说可能是常见的,而不仅仅是 EF 特定的,因为 C# 编译器如何为Where 表达式生成表达式树。

当您将条件指定为:

.Where(x => x.BucketRef == bucketId)

并且 BucketRef 和 BucketId 都是 Shorts,编译器会为比较的两个部分生成从 Short 到 int 的强制转换,因为没有为 Short 类型定义 == 运算符。这在答案中有解释https://stackoverflow.com/a/18584429/869184

作为解决方法,您可以按以下方式重写条件:

.Where(x => x.BucketRef.Equals(bucketId))

这有效地从比较中消除了演员阵容。

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

实体框架 - 荒谬的查询,将smallint转换为int以进行比较[重复] 的相关文章

  • 使用经度和纬度查找给定距离内的所有附近客户

    我有一个包含客户经度和纬度的数据库 我有一个搜索表单 用户将在其中输入日志 纬度 距离下拉列表包含 50 英里 100 英里 当用户单击搜索时 我想编写一个 linq 查询从数据库中获取此距离半径内的所有客户 如何使用 C 和 linq 来
  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 实体框架:无效的列名称 *_ID 1

    我正在尝试为几个名为 的表实现 DbContextEmployee and Department 员工和部门之间的关系是多对一的 即部门可以有很多员工 下面是我设计的EntityFramework类 CodeFirst方法 Table Em
  • C# 中 LINQ 中的按多列分组

    我有一个类如下 public class ActualClass public string BookName get set public string IssuerName get set public DateTime DateOfI
  • 如何将存储过程结果映射到自定义类?

    我在用entity framework 5我已经添加了两个存储过程到我的 edmx model 第一个存储过程返回一个字符串 如果我在 Visual Studio 中打开模型浏览器 我可以更改Returns a Collection Of节
  • 实体框架服务层更新 POCO

    我正在使用Service Layer gt Repository gt Entity Framework Code First w POCO objects方法 我在更新实体方面遇到了困难 我正在使用 AutoMapper 将域对象映射到视
  • 播种多对多数据

    您好 我正在尝试为我的项目创建一些种子 但我在将多对多关系数据播种到数据库时遇到问题 My database看起来像这样 in 教师技能 教师ID and Skill ID当然是他们的表的外键 My seeder看起来像这样 protect
  • 为什么 EF 5.0 在编译为 sql 时不支持此 EF 4.x LINQ 语法?

    我有一些代码最近从 EF 4 2 升级到 EF 5 0 实际上是 EF 4 4 因为我在 Net 4 0 上运行 我发现我必须更改查询的语法 我很好奇为什么 让我从问题开始 我有一个由客户端定期填充的事件日志表 对于每个事件日志 都会在报告
  • 简单的 Linq 查询对同一个表有重复的连接?

    来自 Julia Lerman 的新实体框架书中的示例 我有一个包含两个表的数据库 联系人和地址 Contact 表有一个 ContactID int 以及名字 姓氏等 Address 表有一个 ContactID 以及城市 州 邮政编码等
  • Entity Framework 6(代码优先)实体版本控制和审计

    我正在考虑将 Entity Framework 6 1 1 与 SQL Server 2008 R2 一起使用 目前 我正在使用代码优先的 EF 功能创建模型和数据库 我的基本用例是创建一个特定实体的所有更改的日志 ID是关键栏 以帮助审核
  • 实体框架 - 绑定 WPF 树视图控件

    在服务类别表中 ParentCategoryId 是 ServiceCategoryId 它是父类别 我的类别可以有第 n 级层次结构 因此我需要使用树视图控件来呈现它 我怎样才能做到这一点 Thanks 你可以使用分层数据模板 http
  • 运行更新数据库时出错

    我在运行时遇到以下错误Update Database Verbose 使用启动项目 WebApplication 使用 NuGet 项目 Web应用程序 指定 Verbose 标志来查看 SQL 应用于目标数据库的语句 目标数据库是 星冰乐
  • 在c#中映射两个类

    我有两节课 public class foo1 public int id public string image link public string sale price and public class foo2 public int
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 在同一项目中同时使用 AddDbContextFactory() 和 AddDbContext() 扩展方法

    我正在尝试使用新的DbContextFactory中讨论的模式EF Core 文档的 DbContext 配置部分 https learn microsoft com en us ef core dbcontext configuratio
  • 从类型获取 DbSet

    我正在尝试为 MVC 6 应用程序制作通用表查看器 编辑器 我目前使用 Context GetEntityTypes 返回给我一份表格列表 现在我需要获取特定类型的数据 我当前的实现是 On my context public IQuery
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • Entity Framework 6 多对多想要插入重复行

    不应该这么难 我准备放弃EF了 我的模型有周刊版本 每个版本可以有许多分类广告 每个分类可以出现在一个或多个版本中 我的模型 public class Classifieds Key DatabaseGenerated DatabaseGe
  • 实体类型处于“影子状态”意味着什么?

    在我的 ASP NET Core 1 0 MVC6 EF7 Web 应用程序中 我添加了一个迁移 该迁移添加了新的相关表 和相应的模型 我有以下模型快照 DbContext typeof ApplicationDbContext parti
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf

随机推荐

  • 在 ASP.NET 中使用 Ext JS [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我没有 JavaScrip
  • 使用 Python 将国际字符替换为基本拉丁字符的好方法是什么?

    说我有绳子 bl t tr b t 其中有几个a and o上面有变音符号和圆环 我希望它成为 blot trabat 尽可能简单 我做了一些挖掘并发现了以下方法 import unicodedata unicode string unic
  • React propType 无法读取未定义的属性

    使用 propTypes 验证 props 会出现以下错误 类型错误 无法读取未定义的属性 字符串 类型错误 无法读取未定义的属性 func 有问题的代码位于代码片段的底部 import React from react import Pr
  • 如何将 Google 地图地点库的自动填充功能限制为仅建议一个城市的地点?

    我目前正在使用给定的代码 但这仅将建议限制在一个国家 地区 我见过一种实现 但它使用 jQuery 我想在不使用 jQuery 的情况下实现它 var input document getElementById searchTextFiel
  • 如何在不在 @INC 的目录中“使用”Perl 模块?

    我的脚本的父目录中有一个模块 我想 使用 它 If I do use Foo pm 我收到语法错误 我尝试这样做 push INC use EPMS 并且 显然没有出现在 INC中 我要疯了 这是怎么回事 use发生在编译时 所以这可以工作
  • 单个 Django 模型,多个表?

    我知道以前曾问过这个完全相同的问题 但我希望得到一个 更好 的答案 不涉及在运行时修改类属性 这是问题 单个 Django 模型 多个表 我有同样的问题 我正在寻找类似于响应者的第一个回复的解决方案 但这实际上有效 如果没有更好的解决方案
  • 如何在服务器端安排PHP脚本的执行?

    我需要一个在特定时间自动执行的 PHP 脚本 我将如何实现这个目标 如果您运行的是 Linux Unix 包括 Mac OSX 创建一个 cron 作业 如果您运行的是 Windows 创建计划任务 Note 上述两个链接都专门针对 PHP
  • std::sort 类中的比较函数无法编译

    我正在编写一个程序来获得凸包 我需要按极角对点进行排序 我选择了base之前指出 所以我编写了一个成员比较函数 请注意 对于每个对象base点不同 但是当我将它应用到std sort 程序无法编译 这是我的程序 class ConvexHu
  • 翻译自定义 jQuery 验证消息

    我有一个关于 jQuery 验证的问题要问plugin 我已使用本地化来更改以西班牙语显示的错误消息的默认语言 但我找不到有关要翻译的自定义消息的任何内容 有什么线索吗 例如 我已经包含了西班牙语的翻译文件 这是我的代码 signup fo
  • 如何在Python中将for循环转换为并行处理?

    我仍处于学习 Python 的早期阶段 如果这个问题听起来很愚蠢 请提前道歉 我有这组数据 以表格格式 我想向其中添加一些计算列 基本上我有一些位置经度 纬度和目的地经度 纬度 以及各自的数据时间 并且我正在计算每对之间的平均速度 示例数据
  • 如何在没有singleTop的情况下使用Android SearchView?

    我有一个 Activity 通常希望存在于多个任务中 以便 后退 按钮恢复之前的状态 不过 我也想用一个搜索视图与现有的活动 而不将新的活动推入任务堆栈 因为我想搜索当前显示的内容 这是我的问题 如果我将 Activity 的启动模式设置为
  • AngularJS [$injector:unpr] 未知提供者

    我正在尝试将服务注入控制器 但出现以下错误 Error injector unpr Unknown provider employeeServiceProvider lt employeeService http errors angula
  • PHP 对象与数组——迭代时的性能比较

    我有大量用于神经网络的 PHP 对象 我必须对其进行迭代并执行一些数学运算 我想知道在类实例上使用关联数组是否会更好 我正在处理周围3640对象并迭代500次 最多 因此任何微观优化都有很大帮助 这样做必然会更快吗 object value
  • PHP 显示来自 MySQL 的图像 BLOB [重复]

    这个问题在这里已经有答案了 我正在尝试显示存储在数据库中 BLOB 列中的图像 我使用 SELECT 从数据库中获取数据 不对数据执行任何转换 并使用以下内容显示它 来自唯一输出如下的脚本 header Content Type image
  • Windows Phone 7 关闭应用程序

    是否有可能以编程方式关闭 Windows Phone 7 上的 Silverlight 应用程序 如果您编写 XNA 游戏 您将可以访问显式的Exit 方法 如果您正在编写传统的 Silverlight 项目 那么NO 无法以编程方式关闭您
  • 在 defer 函数内部发生恐慌是否可以,特别是当它已经发生恐慌时?

    func sub defer func panic 2 panic 1 func main defer func x recover println x int sub 我尝试了这段代码 这似乎是第一次恐慌panic 1 只是被第二次恐慌
  • 改造关闭响应体

    我一直收到这个错误 A connection to was leaked Did you forget to close a response body 所以我继续关闭我收到的回复 response body close 问题是 如果 re
  • 与其他禁用的 TextBox 相比,c# TextBox 被禁用时边框会发生变化

    我有一个非常奇怪的问题 我有多个用于用户名 密码的文本框 以及每个用户 密码组旁边的复选框 当用户单击复选框时 如果他选中了它 则其旁边的用户名和密码文本框将被启用 并且焦点将设置为用户名文本框 如果用户取消选中复选框 则其旁边的文本框将被
  • Laravel Blade 使用 $(document).ready 函数

    我正在尝试使用 laravel Blade 模板 包括一些 javascript 代码到子视图中 我有我的邮件应用程序 blade php文件 其中放置 jquery 初始化字符串 在我的子视图文件中设置 blade php我想使用一些 j
  • 实体框架 - 荒谬的查询,将smallint转换为int以进行比较[重复]

    这个问题在这里已经有答案了 这里没有想法了 我有一个简单的表 模型首先与实体框架映射 并生成以下 SQL p linq 0 int p linq 1 int SELECT Extent1 BucketRef AS BucketRef Ext