Odd Linq behavior with IList / IEnumerable
Posted
by Aren B
on Stack Overflow
See other posts from Stack Overflow
or by Aren B
Published on 2010-05-06T22:36:36Z
Indexed on
2010/05/06
22:38 UTC
Read the original article
Hit count: 348
I've got the following code:
public IList<IProductViewModel> ChildProducts { get; set; }
public IList<IProductViewModel> GiftItems { get; set; }
public IList<IProductViewModel> PromoItems { get; set; }
public IList<IProductViewModel> NonGiftItems
{
get
{
return NonPromoItems.Except(GiftItems, new ProductViewModelComparer()).ToList();
}
}
public IList<IProductViewModel> NonPromoItems
{
get
{
return ChildProducts.Where(p => !p.IsPromotion).ToList();
}
}
So basically, NonPromoItems
is (ChildProducts - PromoItems)
and NonGiftItems
is (NonPromoItems - GiftItems)
However When:
ChildProducts
= IEnumerable<IProductViewModel>[6]
PromoItems
= IEnumerable<IProductViewModel>[1]
where item matches 1 item in ChildProducts
GiftItems
= IEnumerable<IProductViewModel>[0]
My Result is
NonPromoItems
= IEnumerable<IProductViewModel>[5]
This is Correct
NonGiftItems
= IEnumerable<IProductViewModel>[4]
This is Incorrect
Somehow an Except(...)
is removing an item when given an empty list to subtract.
Any ideas anyone?
© Stack Overflow or respective owner