自定义扩展方法简化LINQ to 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(offset)
我尝试编写一个执行此操作的扩展方法,但提供程序只是忽略该调用或抛出exception,表明它不知道如何将该调用转换为SQL。 我们可以以某种方式扩展SQL生成器来为我们这样做或者以一种生成相同SQL的方式提供它吗?
提前致谢!
此页面上的链接将向您展示如何使用自定义属性将扩展方法绑定到数据库中的用户定义函数。
当然,这意味着您需要在SQL中创建用户定义的函数,以执行扩展方法想要执行的相同逻辑。
另一个选择是让您的扩展方法生成一个Expression
,并使用LINQKit来解析查询树,从该表达式中找到对.Compile()
的调用,并在查询中内联该表达式。
您可以在实体模型中映射自定义SQL函数。
http://msdn.microsoft.com/en-us/library/dd456812(v=vs.103).aspx
错误的语言(对不起)这里是人们需要的F#。
let catchmentId = // Curry in invariant components. let newSubstr end = phy.PhysicalProperty_binData.Substring(offset + end, 1) Convert.ToInt32( newSubstr 3 + newSubstr 2 + newSubstr 1 + newSubstr 0)