Мне приходилось сталкиваться с чем-то похожим в получении нескольких наборов данных из базы данных для веб-сайта.Мы создали файл DatabaseExtensions.cs для добавления запросов с несколькими наборами данных.
Таким образом, в файле расширений у нас будет что-то вроде этого
public partial class DataBaseDataContext
{
[ResultType(typeof(FirstResult))]
[ResultType(typeof(SecondResult))]
[Function(Name = "dbo.StoredProc")]
public IMultipleResults StoredProc([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<System.Int> ID)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), ID);
return ((IMultipleResults)(result.ReturnValue));
}
}
public class FirstResult;
public class SecondResult;
Примечание: я изменил некоторыеимен вещей в этом коде, чтобы было легче читать, поэтому он может не работать как есть.
FirstResult и SecondResult являются классами типа результата.Я обычно копировал бы их из сопровождающего файла .cs dbml, а затем переименовывал его.Я не включил их код здесь, потому что он может быть довольно длинным.
DataBaseDataContext dataCon = new DataBaseDataContext();
var results = dataCon.StoredProc(id);
var firstSet = results.GetResult<FirstResult>();
var secondSet = results.GetResult<SecondResult>();
//process data
Важно выводить результаты в том же порядке, в каком они появляются в вашей хранимой процедуре.После того, как вы получили свои результаты, вы можете использовать LINQ или что-то еще для работы с ними.