Здесь есть статья о LINQ to SQL и хранимых процедурах, особенно в разделе «Обработка нескольких форм результатов из SPROC»:
LINQ to SQL - получение данных с использованием хранимых процедур .
Это полезно в вашем случае?
В противном случае, не используя LINQ to SQL, возможно, используйте SqlDataReader
NextResult
для просмотра результатов, например:
IList<Employee> employees = new List<Employee>();
IList<Customer> customers = new List<Customer>();
using (SqlConnection connection = new SqlConnection
(Properties.Settings.Default.NorthwindConnectionString))
using (SqlCommand command = new SqlCommand
("GetEmployeesAndCustomers", connection))
{
command.CommandType = CommandType.StoredProcedure;
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Employee e = new Employee{EmployeeID = (int)reader["EmployeeID"]};
employees.Add(e);
}
reader.NextResult();
while (reader.Read())
{
Customer c = new Customer{CustomerID = (string)reader["CustomerID"]};
customers.Add(c);
}
}
}
Редактировать: пример того, как обрабатывать пользовательские комбинации данных, которые нелегко вписываются в объекты модели предметной области; в этом случае получение заказов вместе с клиентами для заказов:
namespace Company.Application.ViewModel
{
public class CustomerOrder
{
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public int OrderID { get; set; }
public DateTime? OrderDate { get; set; }
}
}
namespace Company.Application.Repository
{
public class CustomerOrderRepository
{
public IList<CustomerOrder> GetCustomerOrders()
{
NorthwindDataContext db = new NorthwindDataContext();
var custorders = from customer in db.Customers
join order in db.Orders
on customer.CustomerID equals order.CustomerID
select new CustomerOrder
{
CustomerID = customer.CustomerID,
CustomerName = customer.CompanyName,
OrderID = order.OrderID,
OrderDate = order.OrderDate
};
return custorders.ToList();
}
}
}
Вдохновение для этого: в главе о NerdDinner Скотт Гатри рассказывает о создании пользовательских объектов ViewModel для хранения данных, например, из объединений, которые нелегко вписываются в домен модельные объекты.