在SQL或C#中汇总一列

时间:2011-01-20 15:17:48

标签: c# sql linq tsql

我对那里的TSQL专家或那里的LINQ C#专家有疑问。我有一个存储过程连接在几个表中。基本上是名称,ID和大约10个产品列。存储过程可以返回大量数据(有时为90,000多行)。在存储过程中,我过滤结果以过滤掉该行中所有产品的所有行= 0.我需要做的是删除C#中的列,其中列(产品)中的所有值都为零。这是由于我的应用程序中的一些业务规则(客户请求)。

应用程序可以通过将一组列名称发送到报表生成器来删除(隐藏)列。例如:

|名称| ID | PROD1 | Prod2的| Prod3 | Prod4 |

如果我想从报告中删除Prod3和Prod4:

List<string> hideColumns = new List<string>();
hideColumns.Add("Prod3");
hideColumns.Add("Prod4");

我会发送     hideColumns.ToArray() 到报表生成器,将删除这些列。

在我的应用程序中,我发送所有数据,然后使用以下LINQ查找返回数据的列值。

var zeroCols = from result in data
               group result by new { } into C
               select new ProductDataClass
               {
                   Prod1 = C.Sum(x => x.Prod1)
                   Prod2 = C.Sum(x => x.Prod2)
                   ...etc to Prod10
               };

找出哪个是0

if (zeroCols.Count() > 0)
{
    if (zeroCols.First().Prod1 == 0)
        hideColumns.Add("Prod1");
    ...etc to Prod10
}

但是,我的问题是如果报告返回很多行,LINQ真的很慢。任何人都可以提出任何建议吗?

1 个答案:

答案 0 :(得分:5)

将它拆分为两个查询会更快 - 一个返回数据,另一个聚合查询返回单个行。聚合查询的返回可用于确定哪些列为0且应隐藏。