我希望我能提供一些查询帮助。
我有这个查询
var group =
from r in CustomerItem
group r by r.StoreItemID into g
select new { StoreItemID = g.Key,
ItemCount = g.Count(),
ItemAmount = Customer.Sum(cr => cr.ItemAmount),
RedeemedAmount = Customer.Sum(x => x.RedeemedAmount)
};
我将结果返回到列表中,因此我可以将其绑定到列表框中。
我有一个名为EntryType的属性,它是一个int。有2个可用的数字1或2
假设我有3个项目,我的查询正在使用
其中2个的EntryType = 1,第3个的EntryType2。第一个记录的ItemAmount为55.00,第三个记录的ItemAmount为50.00
如何使用上述类似的东西进行分组,但是从分组数量中减去50.00的ItemAmount以返回60.00?
任何帮助都会很棒!!
答案 0 :(得分:0)
问题是什么并不是很清楚 - 你只是试图忽略条目类型为2的所有项目吗?换句话说,您只想保留条目类型为1的条目?如果是这样,只需添加where
子句:
var group = from r in CustomerItem
where r.EntryType == 1
group r by r.StoreItemID into g
select new {
StoreItemID = g.Key, ItemCount = g.Count(),
ItemAmount = Customer.Sum(cr => cr.ItemAmount),
RedeemedAmount = Customer.Sum(x => x.RedeemedAmount)
};
答案 1 :(得分:0)
将ItemAmount = ...
更改为:
ItemAmount =
g.Where(x => x.EntryType == 1).Sum(cr => cr.ItemAmount) -
g.Where(x => x.EntryType == 2).Sum(cr => cr.ItemAmount),
我将Customer
更改为g
因为这似乎是一个错误,但我不清楚你的问题在这里是什么意思,所以也许这种改变不是你想要的。
稍微简洁的方法是使用测试总和中的条目类型,并使用三元运算符来选择是添加正值还是负值:
ItemAmount = g.Sum(cr => cr.EntryType == 1 ? cr.ItemAmount : -cr.ItemAmount),
根据您的要求,它给出了60.00的值。