如果我有以下查询:-
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/