在SQL或C#中汇总一列

Tom*_*Tom 1 c# sql t-sql linq

我对那里的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");
Run Code Online (Sandbox Code Playgroud)

我会将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
               };
Run Code Online (Sandbox Code Playgroud)

找到哪个是0

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

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

Dav*_*sky 5

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