我有两个表,即客户和订单。 1个客户可以有多个订单。这两个表之间有一个链接。
目前使用Linq to SQL获取数据并显示它。数据库已经增长,结果显示速度很慢。
经过一些阅读后,我添加了一个存储过程(将SP添加到dbml文件中,该文件返回ISingleResult,因此创建了一个新方法,我遍历SP数据并将其添加到我的Customers对象列表中)。我这样做是为了加快获取和显示数据的速度。到目前为止,这很有效。
问题是当我以前收到客户的订单详情时,我曾经写过这个
foreach (Customer c in Customer)
{
foreach (Order o in c.Orders)
{
// other logic here
}
}
使用存储过程方法c.Orders为null所以我将相关关系添加到SP但是Orders总是为null - 唯一改变的是返回的行数与订单数相同客户已经放置,但我不能像添加SP之前那样迭代订单?
关于我出错或做什么的想法?
我的存储过程:
Select Customers.*, Orders.ID
FROM
Customers INNER JOIN Orders ON Customers.Ordersid = Orders.Ordersid
在代码中我有
public List<Customer> GetCustomers
{
ISingleResult<StoredProcedureName> AllCustomers = myDC.StoreProcedureName;
List<Customer> Customers = new List<Customer>();
foreach (var c in AllCustomers)
{
//Add each property from SP into List properties and return List
}
//....
}
答案 0 :(得分:0)
我想您需要在查询中使用Include子句来强制dbcontext加载导航属性&#34; Orders&#34;为每个客户。看这篇文章:
答案 1 :(得分:0)
您实际上并没有选择订单对象,而是只抓取ID。
尝试将存储过程简化为:
Select * -- take everything
FROM
Customers INNER JOIN Orders ON Customers.Ordersid = Orders.Ordersid