从返回的linq查询中删除值

时间:2010-03-14 18:48:03

标签: linq

我希望我能提供一些查询帮助。

我有这个查询

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?

任何帮助都会很棒!!

2 个答案:

答案 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的值。