当前位置: 首页 > 面试题库 >

自定义扩展方法可简化LINQ to SQL语句

韦安怡
2023-03-14
问题内容

我有很多查询需要使用的LINQ代码片段

let catchmentId = Convert.ToInt32(
        phy.PhysicalProperty_binData.Substring(offset + 3, 1) +
        phy.PhysicalProperty_binData.Substring(offset + 2, 1) +
        phy.PhysicalProperty_binData.Substring(offset + 1, 1) +
        phy.PhysicalProperty_binData.Substring(offset, 1))

这可以很好地转换为SQL(并且对于我的特定需求而言,性能更高),但是会使我的查询看起来很丑陋。有什么办法可以使我变得更简单些吗?也许是一个返回Expression>的扩展方法?请注意,我不想将数据获取到客户端(作为SQL在服务器上运行),这会使事情变得更加复杂。例如:

let catchmentId = phy.PhysicalProperty_binData.AnExtensionMethodHere<int>(offset)

我尝试编写一个扩展方法来执行此操作,但是提供程序只是忽略了该调用,或者抛出了一个异常,说明它不知道如何将该调用转换为SQL。我们是否可以通过某种方式扩展SQL生成器来为我们执行此操作,或者以某种方式生成它以生成相同的SQL?

提前致谢!


问题答案:

此页面上的链接将向您展示如何使用自定义属性将扩展方法与数据库中用户定义的函数相关联。

当然,这意味着您需要在SQL中创建用户定义的函数,以执行与扩展方法所需的逻辑相同的逻辑。

另一个选择是让您的扩展方法产生一个Expression,并使用LINQKit解析查询树,找到.Compile()对该表达式的调用,并在查询中内联该表达式。



 类似资料:
  • 问题内容: 因此,我正在用Java开发DVD租赁系统,并且遇到了视图问题。这是我的代码: 现在,Member和Item只是我制作的代表用户(成员)和电影/游戏(Item)的对象类。 和 我的问题是,我对如何创建自定义的,覆盖的“ SetValueAt()”方法以用“成员/项”中的信息填充JTables感到困惑。另一个问题是侦听器类中的所有空if语句。我不确定如何执行它们。如果有人可以就任何这些问题

  • 目前 Mars 支持自定义 xlog 的加密部分和长短连协议加解包部分。需要强调的是想要自定义这些扩展,需要在本地编译 Mars 才可以,编译方法见 Mars Android 接入指南 和 Mars iOS/OS X 接入指南 中的编译部分。切记,在自定义实现时,可以增加函数,但是不能删除头文件中已有的函数,也不能修改头文件中的函数原型。 自定义 xlog 加密 xlog 的具体实现可以参考微信终

  • 本文向大家介绍Laravel框架中扩展函数、扩展自定义类的方法,包括了Laravel框架中扩展函数、扩展自定义类的方法的使用技巧和注意事项,需要的朋友参考一下 一、扩展自己的类 在app/ 下建立目录 libraries\class  然后myTest.php 类名格式 驼峰 myTest 在 app/start/global.php 用 make 载入 二、扩展自己的函数 在app/ 下建立目录

  • 当我们在开发某些东西时,经常会需要我们自己的 error 类来反映在我们的任务中可能出错的特定任务。对于网络操作中的 error,我们需要 HttpError,对于数据库操作中的 error,我们需要 DbError,对于搜索操作中的 error,我们需要 NotFoundError,等等。 我们自定义的 error 应该支持基本的 error 的属性,例如 message,name,并且最好还有

  • 我希望在iOS上创建一个BLE广告,我可以在字节级别上控制广告。 一个用例是模仿iBeacon广告。什么是iBeacon蓝牙配置文件(我想做广告,而我的应用程序是在后台,这就是为什么我不使用核心位置) 我看不到用核心蓝牙应用编程接口做到这一点的方法。这样做正确吗?是否有使用私有API或越狱的替代方案?

  • 问题内容: 在大多数情况下,方法的结果是一个数组,可以使用以下(工厂)代码通过某些方法(业务逻辑)轻松扩展该数组: 这非常适合与ng-repeat / ng-class一起使用,如下所示: 我的问题是, 每个列表响应都封装 在一个对象中,该对象除了实际列表之外,还具有一些元属性(排序信息等),因此返回的最终对象是这样的: 现在,如何使用ng-repeat / ng-class做与以前相同的事情?