我对那里的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真的很慢。任何人都可以提出任何建议吗?
答案 0 :(得分:5)
将它拆分为两个查询会更快 - 一个返回数据,另一个聚合查询返回单个行。聚合查询的返回可用于确定哪些列为0且应隐藏。