【问题标题】:bind data from several tables to specific control将多个表中的数据绑定到特定控件
【发布时间】:2011-07-02 13:56:58
【问题描述】:

问:

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

我将使用 gridview 或 schedule 等高级控件,并且应该绑定到此控件的数据是:来自我数据库中的一组表的数据。不是单个表。

这种数据的最佳形式是什么?

我一开始想到的是:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    编辑

    因为您似乎真的不想使用存储过程。妥协怎么办? 在分别从数据库中获取所有数据后,您可以使用 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 是指向更多信息的链接。

    【讨论】:

    • 拜托,你能澄清一下“容纳数据组合的结构”是什么意思吗
    • 我的意思是创建一个类,其中包含您需要在网格中显示的每个数据项的属性。然后,您将为要显示的每一行填充其中一个对象,然后将控件绑定到这些对象的列表。但是请记住,这可能不会比在具有适当索引的联接表上使用存储过程更快。
    • 我已经更新了我的答案,以更好地满足您的需求
    【解决方案2】:

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

    我相信,有了正确的索引,性能就不会成为问题,如果您有大量数据会导致问题,您可能会提到它,因为我们那时会谈到大量数据,数百万行最少。

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

    另一方面,如果数据不适合自己进行连接,也许您需要处理一个表中的数据以了解在其他表中要链接的内容,然后您可以创建类以在 c# 中存储数据同时执行匹配。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多