使用 Entity + LINQ 为何不只是对我的查询进行硬编码?

2024-02-04

所以我现在已经使用 Entity + LINQ 进行开发一段时间了,我真的开始想知道最佳实践。我习惯了“如果我需要获取数据,则引用存储过程”的模型。如果需要,可以动态更改存储过程,并且不需要重新编译代码。我发现我的代码中的查询如下所示:

List<int> intList = (from query in context.DBTable
                     where query.ForeignKeyId == fkIdToSearchFor
                     select query.ID).ToList();

我开始想知道这个和这个有什么区别:

List<int> intList = SomeMgrThatDoesSQLExecute.GetResults(
                                  string.Format("SELECT [ID]
                                                 FROM DBTable
                                                 WHERE ForeignKeyId = {0}",
                                  fkIdToSearchFor));

我担心的是,我本质上是将查询硬编码到代码中。我错过了什么吗?这就是实体的意义吗?如果我需要做任何实际的查询工作,我应该把它放在存储过程中吗?


直到您需要更复杂的查询时,Linq 的强大功能才真正显现出来。

在您的示例中,请考虑如果您想对查询应用某种形式的过滤器,您需要做什么。使用字符串构建的 SQL,您必须将值附加到字符串生成器中,以防止 SQL 注入(或者花费额外的精力来准备带有参数的语句)。

假设您想向 linq 查询添加一条语句;

IQueryable<Table> results = from query in context.Table
                            where query.ForeignKeyId = fldToSearchFor
                            select query;

你可以接受并做到这一点;

results.Where( r => r.Value > 5);

生成的 sql 看起来像这样;

SELECT * FROM Table WHERE ForeignKeyId = fldToSearchFor AND Value > 5

在枚举结果集之前,您想要装饰的任何额外条件都会为您添加,从而以更加灵活和强大的方式进行动态查询。我使用这样的方法在列表上提供过滤器。

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

使用 Entity + LINQ 为何不只是对我的查询进行硬编码? 的相关文章

  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • /assets/css 中的某些文件未找到 [Playframework]

    您好 我遇到了未解决的依赖关系的问题 sbt ResolveException 未解决的依赖关系 play sbt plugin 2 2 0 未找到 然后我在这里找到了解决方案 将项目升级到 Play Framework 2 2 0 版本
  • hibernate集合-无效的列索引

    我在 hibernate 和 JPA 中创建了一个父类和子类 当我尝试保留该类时 我收到一个 SQL 异常 指出 列索引无效 这是父类 Entity Table name vnd base file format public class
  • Three.js:创建直三棱柱

    我正在尝试创建一个直角三棱柱 到目前为止 这是我的代码 var triangleGeometry new THREE Geometry triangleGeometry vertices push new THREE Vector3 1 0
  • React JS - onChange 触发两次

    当我使用react image uploader上传图像时 onchange会触发两次 所以它尝试将图像上传到后端两次 这是我的处理方式 user uploads image to app
  • Kotlin Mockk 错误:verify { ... } 块内缺少调用

    我已经读到了一些与此错误消息或类似错误消息有关的问题 每个 也会出现此问题 但没有一个问题能让我获得成功结果 关于如何让它发挥作用有什么提示或建议吗 这是我的设置和单元测试本身 compileSdkVersion 29 defaultCon
  • 如何知道 GWT ScrollPanel 中正在显示哪个元素

    关于 GWT ScrollPanel 的问题 有没有办法确定 ScrollPanel 中正在显示哪个子元素 当然 ScrollPanel包含具有HTML对象的DecoratorPanel 下面是执行该作业的 GWT 方法 它是从上面建议的
  • 如何将 RUNAS /NETONLY 功能构建到 (C#/.NET/WinForms) 程序中?

    我们的工作站不是 SQL Server 所在域的成员 它们实际上根本不在域中 不要问 当我们使用 SSMS 或任何其他方式连接到 SQL Server 时 我们将 RUNAS NETONLY 与 DOMAIN user 一起使用 然后我们输
  • 如何检查我的计算机上是否打开了另一个应用程序窗口(即遍历所有打开的窗口)?

    我有一个应用程序 可以将一系列文本文件写入用户计算机上的文件夹中 然后 它会提示他们是否要打开该文件夹以查看所有文件 我使用 System Diagnostics Process Start 来执行此操作并且效果很好 但是 如果已经有一个打
  • 如何在 anaconda 中升级 scikit-learn 包

    我正在尝试将 scikit learn 包从 0 16 升级到 0 17 为此 我尝试使用此网站上的二进制文件 http www lfd uci edu gohlke pythonlibs scikit learn http www lfd
  • 如何通过AWS lambda在python中创建密码加密的zip文件

    我正在尝试通过在 python 3 9 上运行的 lambda 创建受密码保护的 zip 文件 我尝试过使用 pyminizip 和 pyzipper 但两个库都遇到错误 对于 pyminizip 我不断遇到Unable to import
  • 没有 JIT 的 Android 设备

    我正在关注性能技巧 http developer android com training articles perf tips html通过开发者网站 其中提到了没有 JIT 的 Android 设备 但我搜索了无 jit 设备 但找不到
  • POST 方法、Ajax 和安全性?

    我使用 Ajax jQuery 和 POST 方法来更新数据库中的数据 我执行以下操作 从表单获取数据 user id entry id content 将它们发送到将处理数据的 URL 如果数据有效 我们会将其记录在我们的数据库中 我不知
  • 如何在android汉堡菜单图标上实现徽章计数器[重复]

    这个问题在这里已经有答案了 我正在尝试在汉堡菜单图标 即不是其他菜单图标 上实现计数器徽章 类似于 eBay 应用程序 如在 有人研究过这个吗 试图找出尽可能最干净的方法 做起来很简单Toolbar Widget您可以按照下面的示例来实现
  • 使用 PHP 清理 URL [重复]

    这个问题在这里已经有答案了 所以我试图在 PHP 中构建一个干净的 url 系统来更改这样的 URLhttp example com index php projects 05 to http example com projects 05
  • VS/NuGet 如何决定创建 csproj 引用以及差异意味着什么?

    当我安装 NuGet 包时 它通常会使用新引用更新我的 proj 文件 如下所示
  • 在无限一维图中寻找洞的算法

    一头牛站在无边无际的栅栏前 另一边是草地 牛想要到达这片草地 沿着栅栏的某个地方有一个洞 牛可以通过这个洞到达另一边 从牛到洞的距离 d 具有与之相关的概率分布 f d 即洞距牛 k 步的概率由 f k 给出 请注意 我们认为所有距离都是离
  • 如何将我的 Facebook 页面中的最新帖子显示到我的网站

    我在 Facebook 上有一个页面 我想在我的网站页面上显示我的提要 墙上的最新 5 个帖子 这个怎么做 我找到了这个解决方案 很简单 https developers facebook com docs reference plugin
  • OS X El Capitan 中的“受限”文件夹/文件

    从 OS X Yosemite 升级到 OS X El Capitan Developer Preview 后 我尝试编辑 系统 库 LaunchDaemons ssh plist将默认 SSH 端口更改为自定义端口 这是我几年来一直使用的
  • 有没有办法从 XS 访问 perl 中的特殊令牌?

    在 Perl 中 特殊标记如 PACKAGE SUB FILE LINE 存在并可从脚本中获取 我可能会得到的价值 PACKAGE from XS as HvNAME PL currstash 我想 但如何访问别人呢 是否有特殊的接口可以访
  • 使用 Entity + LINQ 为何不只是对我的查询进行硬编码?

    所以我现在已经使用 Entity LINQ 进行开发一段时间了 我真的开始想知道最佳实践 我习惯了 如果我需要获取数据 则引用存储过程 的模型 如果需要 可以动态更改存储过程 并且不需要重新编译代码 我发现我的代码中的查询如下所示 List