无行循环将行转换为列

时间:2010-02-12 05:53:31

标签: c# linq-to-sql gridview

我的情况是我有以下数据

User1   Address1    HomeAddress     Address1Value
User1   Address2    WorkAddress     Address2Value
User1   Phone1      HomePhone       Phone1Value
User1   Phone2      WorkPhone       Phone2Value
User2   Address1    HomeAddress     Address1Value
User2   Address2    WorkAddress     Address2Value
User2   Phone1      HomePhone       Phone1Value
User2   Phone2      WorkPhone       Phone2Value
User3   Address1    HomeAddress     Address1Value
User3   Address2    WorkAddress     Address2Value
User3   Phone1      HomePhone       Phone1Value
User3   Phone2      WorkPhone       Phone2Value

现在我必须在gridview中显示以下数据。

**Users    HomeAddress      WorkAddress      HomePhone      WorkPhone**
  User1    Address1Value    Address2Value    Phone1Value    Phone2Value
  User2    Address1Value    Address2Value    Phone1Value    Phone2Value
  User3    Address1Value    Address2Value    Phone1Value    Phone2Value

我有一个选择是我遍历数据集并将4行数据转换为列。然后绑定数据。但这看起来不是一种有效的方法,因为我有足够的数据。

有没有有效的方法可以做到这一点?

我正在使用LINQ to SQL。我有一个Sql Server视图,返回每个用户4行的结果。

2 个答案:

答案 0 :(得分:0)

如果您已经通过网络将“大量数据”从数据库传输到应用程序,那么在内存中转动它的最后一步可能不是一个大问题。

IMO,要么“在源头”转动它,要么只是在本地转动它,然后看它是否是瓶颈。你可以也写一些时髦的绑定模型,但我怀疑它是值得的。最后一个选项是使用“虚拟模式”(如果列表支持它),并在查找期间执行转换(理想情况下使用基于字典的行查找 - 可能是预先计算的Lookup<,>)。

答案 1 :(得分:0)

不要离Marc's answer太远,我强烈建议在SQL Server上进行。透视通常是一个更快的操作(毕竟SQL服务器已经过优化以完成此类工作)。

此外,它是代码,您不必编写(意味着透视代码,因为SQL为您提供操作,而不是自己在.NET中编写),这是这里有一个重点,IMO。