在一次数据库中多次调用Linq to SQL用户定义函数

时间:2013-09-17 10:25:42

标签: c# sql-server linq linq-to-sql

我有一个用户定义的函数,它接受2个datetime参数并返回一个short。

我已将它添加到我的Linq to Sql模型中,这意味着我有如下函数:

private short? Aqua_NumShopDays(System.Nullable<System.DateTime> start,
                                System.Nullable<System.DateTime> end)

所以,我的问题是,如何轻松地(以LINQy类型的方式)为多个日期对调用它,这只导致一次数据库之旅?

如果需要而不是日期列表,如果第一个参数是固定的,第二个参数是给定范围内的每个值,它仍然是有用的。

1 个答案:

答案 0 :(得分:0)

我发现目前为止最好的是创建一个包含一系列数字的表(或创建一个的用户函数),然后在Linq-To-SQL中使用它,如下所示:

// NumberRange is my user defined function, that returns a table with all a row per number
// Here I take that number and calculate the date based on an offset from today
var test = from dayOffset in ARDC.NumberRange(1, 10)
           select DateTime.Today.AddDays(dayOffset.Counter.Value); // Counter is the column name of the table returned

// Using the dates, that are calculated on the server, I select a call to the SQL function
var testResults = from toDate in test
                  select ARDC.Aqua_NumShipDays(DateTime.Today, toDate).Value;

var t = testResults.ToList(); // This results in ONE trip to the database! (yay!)