【发布时间】:2016-07-28 15:24:55
【问题描述】:
我有两张表,Customers 和 Orders。 1 个客户可以有多个订单。两个表之间有一个链接。
目前使用 Linq to SQL 获取数据并显示。数据库已经增长,结果显示速度很慢。
经过阅读后,我添加了一个存储过程(将 SP 添加到返回 ISingleResult 的 dbml 文件中,因此创建了一个新方法,我在其中迭代 SP 数据并将其添加到我的客户对象列表中)。我这样做是为了加快获取和显示数据的速度。到目前为止,这运作良好。
问题是我以前从客户那里获取订单详细信息时,我曾经写过这个
foreach (Customer c in Customer)
{
foreach (Order o in c.Orders)
{
// other logic here
}
}
使用存储过程方法 c.Orders 为空,因此我将相关关系添加到 SP 但 Orders 始终为空 - 唯一改变的是返回的行数与订单数相同客户已下单,但我无法像添加 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
}
//....
}
【问题讨论】:
-
我假设您的客户类有一个虚拟属性
Orders?您正在加入存储过程中的 Orders 表吗?该过程不会仅仅因为关系表而自行执行此操作。 -
也许你可以分享一下这个过程以及你是如何称呼它的。
-
我已将基本的 SQL 和 C# 代码添加到我的原始帖子中。谢谢
-
能否包含映射文件和您所说的正常工作的 LINQ 查询?
-
我的意思是,我将一个表拖到我的 dbml 文件中,它为我完成了其他所有工作。我不必在这部分编写任何代码,但我所做的只是获取客户并遍历添加到我的客户对象并作为列表返回的数据(上面的代码)
标签: c# .net linq stored-procedures linq-to-sql