如果这就是您的意思,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进行获取- 但我仍然可以将其与常规模型组合在一起。