我有一个存储过程如下:
CREATE PROCEDURE GetMultipleResults
@SomeID int
AS
BEGIN
SELECT * FROM SomeTable1 where SomeColumn1 = @SomeID
SELECT * FROM SomeTable2 where SomeColumn2 = @SomeID
SELECT * FROM SomeTable3 where SomeColumn3 = @SomeID
SELECT * FROM SomeTable4 where SomeColumn4 = @SomeID
END
然后我使用以下代码来执行和检索数据:
[Function(Name = "dbo.SPROCName")]
[ResultType(typeof(ResultSet1))]
[ResultType(typeof(ResultSet2))]
[ResultType(typeof(ResultSet3))]
[ResultType(typeof(ResultSet4))]
public IMultipleResults SomeMethod([Parameter(DbType = "INT")] int? SomeID
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), SomeID);
return ((IMultipleResults)(result.ReturnValue));
}
现在最后,为了获得每个结果,我执行如下操作:
public void SomeOtherMethod(int SomeID)
{
DataContext1 context = new DataContext1 (dbConnString);
IMultipleResults results = context.SomeMethod(SomeID);
ResultSet1 resultSet1= results.GetResult().FirstOrDefault();
IEnumerable resultSet2 = results.GetResult().ToList();
IEnumerable resultSet3 = results.GetResult().ToList();
ResultSet4 resultSet4= results.GetResult().FirstOrDefault();
}
我的问题是,Linq-to-SQL 是否执行整个存储过程一次,然后GetResult()
用于从内存中获取它,或者它是否执行 n 个查询(往返 db 调用),其中 n 是存储中的 select 语句数proc(本例中为 4)?
我问的原因是因为即使对于大数据,以下行几乎也需要相同的时间来执行:
IMultipleResults results = context.SomeMethod(SomeID);
但是在 resultSet3 是大量数据的情况下运行以下部分需要一些明显的时间:
IEnumerable resultSet3 = results.GetResult().ToList();