c# - 按值过滤 linq 查询

标签 c# linq

如果我有以下查询:-

var Values = from data in DtSet.Tables["tblCosts"].AsEnumerable()
            group data by new
            {
                InvNo = data.Field<double>("InvoiceNo"),
                AccRef = data.Field<double>("SiteRefNum"),
            }
            into g
            select new
            {
                Code = "1",
                InvType = "I",
                Account = g.Key.AccRef,
                InvNo = g.Key.InvNo,
                ChargeTotal = g.Sum(d => d.field<double>("Charge")
            };

...排除 ChargeTotal 列之和为零的行的最佳方法是什么?我假设我必须使用 WHERE,但我不确定将它放在哪里。

最佳答案

你没有很多解决方案,因为 where 必须在 group by 之后调用(这取决于组),然后:

var Values = from data in DtSet.Tables["tblCosts"].AsEnumerable()
             group data by new
             {
                 InvNo = data.Field<double>("InvoiceNo"),
                 AccRef = data.Field<double>("SiteRefNum"),
             }
             into g
             let sum = g.Sum(d => d.field<double>("Charge"))  // Sum only computed once
             where sum != 0
             select new
             {
                 Code = "1",
                 InvType = "I",
                 Account = g.Key.AccRef,
                 InvNo = g.Key.InvNo,
                 ChargeTotal = sum
             };

要稍微提高性能(你必须测试两者以查看是否有任何性能改进,因为它高度依赖于数据),如果 d.field("Charge") 始终 >= 0,你可以这样做:

var Values = from data in DtSet.Tables["tblCosts"].AsEnumerable()
             group data by new
             {
                 InvNo = data.Field<double>("InvoiceNo"),
                 AccRef = data.Field<double>("SiteRefNum"),
             }
             into g
             where g.Any(d => d.field<double>("Charge") != 0)  
             select new
             {
                 Code = "1",
                 InvType = "I",
                 Account = g.Key.AccRef,
                 InvNo = g.Key.InvNo,
                 ChargeTotal = g.Sum(d => d.field<double>("Charge"))
             };

关于c# - 按值过滤 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585520/

相关文章:

c# - 最好只对内部的静态字段使用类或结构

c# - Facebook C# SDK授权问题

C# 终止所有对运行 Windows 不重要的进程

c# - 在 vlc dot net (winforms) 中设置播放速度

c# - 我可以将集合初始值设定项与 LINQ 一起使用以返回完全填充的集合吗?

c# - LINQ 查询连接两个表并从表 B 中选择表 A 对应的最新记录

c# - 在我的 MVC View 中获取 ViewModel 数据

c# - 从 lambda 表达式中的函数调用获取返回值

c# - 无法使用 LINQ to XML 读取 XML 注释

c# - 从 lambda 表达式生成 sql server 查询的替代方法