小编典典

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

sql

我有很多查询需要使用的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?

提前致谢!


阅读 154

收藏
2021-04-14

共1个答案

小编典典

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

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

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

2021-04-14