KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
NOTE : Right before posting this question it occurred to me there's a better way of doing what I was trying to accomplish (and I feel pretty stupid about it): IEnumerable<string> checkedItems = ProductTypesList.CheckedItems.Cast<string>(); filter = p => checkedItems.Contains(p.ProductType); So OK, yes, I already realize this. However, I'm posting the question anyway, because I still don't quite get why what I was (stupidly) trying to do wasn't working. I thought this would be extremely easy. Turns out it is giving me quite a headache. The basic idea: display all the items whose ProductType property value is checked in a CheckedListBox . The implementation: private Func<Product, bool> GetProductTypeFilter() { // if nothing is checked, display nothing Func<Product, bool> filter = p => false; foreach (string pt in ProductTypesList.CheckedItems.Cast<string>()) { Func<Product, bool> prevFilter = filter; filter = p => (prevFilter(p) || p.ProductType == pt); } return filter; } However, say the items "Equity" and "ETF" are both checked in ProductTypesList (a CheckedListBox ). Then for some reason, the following code only returns products of type "ETF": var filter = GetProductTypeFilter(); IEnumerable<Product> filteredProducts = allProducts.Where(filter); I guessed it might have had something to do with some self-referencing messiness where filter is set to, essentially, itself or something else. And I thought that maybe using ... filter = new Func<Product, bool>(p => (prevFilter(p) || p.ProductType == pt)); ...would do the trick, but no such luck. Can anybody see what I am missing here?
Tags (comma-separated)
Save Edits
Cancel