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

是否可以在LINQ to SQL中使用/访问标量函数?

左仰岳
2023-03-14
问题内容

我们的数据库中具有标量函数,用于返回诸如“客户的任务数量”或“客户的发票总额”之类的内容。

我们正在尝试并尝试不使用存储过程来执行此操作…通常,我们只需要在存储过程中调用此函数并将其作为单个值返回即可。

有没有一种方法可以在LINQ to
SQL中使用或访问标量函数?如果是这样,那么我将有兴趣看到一个示例,该示例如何…如果没有,那么如何最好地处理这种情况…甚至是可行的。


问题答案:

如果这就是您的意思,LINQ-to-
SQL支持与UDF一起使用。只需将UDF拖到设计器图面上即可。这会在数据上下文上创建一个标记[Function(..., IsComposable=true)]或类似的匹配方法,告诉LINQ-to-
SQL它可以在查询中使用此方法(请注意EF不支持此用法)。

然后,您可以在查询中使用它,例如:

var qry = from cust in ctx.Custs
           select new {Id = cust.Id, Value = ctx.GetTotalValue(cust.Id)};

它将变成TSQL之类的东西:

SELECT t1.Id, dbo.MyUdf(t1.Id)
FROM CUSTOMER t1

(或大约)。

它是可组合的事实意味着您可以在查询中使用该值,例如在Where()/中使用WHERE-,从而减少从服务器返回的数据(尽管显然仍需要以某种方式执行UDF)。

这是一个类似的示例,显示了在数据上下文中使用的伪UDF,说明未使用该方法的C#版本。

实际上,我目前正在研究这样的UDF,以可组合的方式提供“模型外”数据-
即系统的特定部分需要访问一些不是真的数据(恰好在同一个数据库中)相同模型的一部分,但我想以JOIN有趣的方式。我也有用于此目的的现有SP
…因此,我正在考虑将这些SP移植到表格式UDF,这为围绕模型外数据提供了一定程度的合同/抽象性。因此,由于它不是模型的一部分,因此只能通过UDF进行获取-
但我仍然可以将其与常规模型组合在一起。



 类似资料:
  • 问题内容: javascript中的函数通过保持与其隐藏范围的(隐藏)链接来形成关闭。 当我们拥有函数(作为变量值)时,是否可以通过编程方式访问它? 真正的目标是理论上的,但一个演示可能是列出闭合的属性。 问题答案: 这是关闭的目的之一(使信息保密)。由于该函数已经执行,因此它的作用域变量不再可从外部获得(并且从未使用过)-只有在其作用域中执行的函数(仍然)可以访问。 但是,您可以通过getter

  • 问题内容: 我试图编写一个Int扩展名以将Int限制在特定范围内,如下所示: 我遇到了编译器错误,过了一会儿我才意识到这在这里被解释为,这是最低的常量。 我可以重新实现,以避免/,但是我很好奇:有没有办法可以从扩展中引用那些? 问题答案: 您可以在前面加上模块名称: 只是为了好玩:您得到的结果与 使用的方法。

  • 问题内容: 我想使用Streams.intRange(int start,int end,int step)实现反向排序的流。但是,似乎java.util.Streams类不再可用(但是它仍在标准库的rt.jar中)。此方法是在其他类中还是被其他方法替代? 问题答案: 实际上,JDK中再也没有这种方法了。您能获得的下一个最接近的位置是,但是只会一步一步走。 一种解决方案是实施您自己的解决方案。例如

  • 问题内容: 我外面有一个数组: 我想让我的函数可以访问其外部的数组,以便可以向其添加值 如何为函数赋予正确的作用域范围? 问题答案: 默认情况下,当您在函数内部时,您无权访问外部变量。 如果您希望函数可以访问外部变量,则必须在函数内部将其声明为: 有关更多信息,请参见 可变作用域 。 但是请注意, 使用全局变量不是一个好习惯 :通过这种方法,您的函数不再是独立的。 一个更好的主意是使您的函数 返回

  • 本文向大家介绍是否可以在C / C ++中访问局部变量的内存?,包括了是否可以在C / C ++中访问局部变量的内存?的使用技巧和注意事项,需要的朋友参考一下 让我们看一个示例,您可能可以访问超出其范围的局部变量的内存。 示例 输出结果 这可能会给出输出- 如前 ,此代码可以正常工作。我们只是在读取和写入内存,将USED用作x的地址。总的来说,您超出了foo的范围,该地址是指向某个随机内存区域的指

  • 我希望GCP上的云函数可以私下连接到Google API(例如,compute.googleapis.com)。也就是说,不是通过互联网。我还希望此云功能通过无服务器VPC访问器将所有流量导出到VPC。 要让VM私下连接到Google API,需要为VM所在的子网启用Private Google Access。但是,对于Functions,“无服务器连接器”本身不是子网,因此无法为此连接器启用Pr