将来自多个表的数据绑定到特定控件

时间:2011-02-23 08:03:57

标签: c# asp.net database sql-server-2008 stored-procedures

问:

我有以下情况,我需要最佳性能答案:

我将使用像gridview或schedule这样的高级控件,并且应该绑定到此控件的数据是:数据库中的表集中的数据。不是单个表。

此数据的最佳形式是什么?

我最初想到的是:

存储过程,包含我的逻辑(我想在这里询问什么是最佳性能)使用临时表或连接或...等。

什么是可能的解决方案和更多的性能而不是存储过程(因为这是许多用户将使用它的Web应用程序)。 如果有一个例子可以澄清这个想法,我将不胜感激。 提前致谢。

2 个答案:

答案 0 :(得分:2)

最常见的方法是在sql存储过程中连接表,除非要连接许多表或使用多个嵌套的select语句,否则性能通常不是问题。

但是,如果您确实需要替代方案,则可以单独加载每个表中的数据(可能是代表性对象,即用户表中每行数据的用户对象),然后创建一个数据结构来容纳组合数据(即,如果您有用户对象和计划对象,您可以创建UserSchedule对象),那么您可以将控件绑定到这些辅助对象的列表。

修改

因为你似乎真的不想使用存储过程。折衷怎么样? 在单独从DB中获取所有数据后,您可以使用LINQ to实体连接C#中的多组数据。

以下是一个例子:

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;
ObjectSet<SalesOrderDetail> details = context.SalesOrderDetails;

var query =
    from order in orders
    join detail in details
    on order.SalesOrderID
    equals detail.SalesOrderID into orderGroup
    select new
    {
        CustomerID = order.SalesOrderID,
        OrderCount = orderGroup.Count()
    };

here是指向更多信息的链接。

答案 1 :(得分:1)

如果表中的信息有任何公共标识符,则应直接或通过存储过程使用Join。

使用正确的索引我认为性能不会是一个问题,如果你有可能导致问题的数据量,你可能会提到它,因为我们会说大量数据,数百万行至少

如果您确实遇到性能问题,可能是由于索引丢失或错误或查询错误,然后您可以返回一个关于如何优化该查询的特定问题:)

另一方面,如果数据没有自己加入,可能你需要处理一个表中的数据以知道在其他表中链接的内容然后你可以创建类来在c#中存储数据匹配。

如果您使用至少3.5的c#,则可以在解析数据后使用Linq加入生成的数据结构。

如果您使用的是c#2.0,您可以使用所有存储过程进行匹配,也可以使用您加入的临时表,或者使用表变量或表值函数来解析一个表并返回一个新表可以加入。