开发者

Removing values from a returned linq query

开发者 https://www.devze.com 2022-12-23 09:22 出处:网络
HI there I am hoping for some help with a query I have. I have this query var group = from r in CustomerItem

HI there I am hoping for some help with a query I have.

I have this query

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) 
               };

I am returning my results to a list so I can bind it listbox.

I have a property called EntryType which is an int. There are 2 available numbers 1 or 2

Lets say I had 3 items that my query is working with

2 of them had the EntryType = 1 and the 3rd had Entr开发者_开发知识库yType2. The first records had a ItemAmount of 55.00 and the 3rd had a ItemAmount of 50.00

How can I group using something simlar to above but minus the ItemAmount of 50.00 from the grouped amount to return 60.00?

Any help would be great!!


It's not really clear what the question is - are you just trying to ignore all items with an entry type of 2? To put it another way, you only want to keep entries with an entry type of 1? If so, just add a where clause:

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)
            };


Change ItemAmount = ... to:

ItemAmount =
   g.Where(x => x.EntryType == 1).Sum(cr => cr.ItemAmount) -
   g.Where(x => x.EntryType == 2).Sum(cr => cr.ItemAmount),

I changed Customer to g because this seems to be an error, but it's not clear to me from your question what you mean here, so maybe this change is not what you want.

A slightly more concise method is to use test the entry type in the sum and use the ternary operator to choose whether to add the positive or negative value:

ItemAmount = g.Sum(cr => cr.EntryType == 1 ? cr.ItemAmount : -cr.ItemAmount),

This gives the value of 60.00 as you required.

0

精彩评论

暂无评论...
验证码 换一张
取 消