Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How to filter generic lists by different algorithms or filter criteria?

Posted on 2010-11-09
3
Medium Priority
?
699 Views
Last Modified: 2013-12-17
We have a situation that extends beyond normal security/permissions where in addition to determining if users have access to certain areas of an application with security principles and identities we need to filter results within sections of the application based on additional values.  Is there a generic way to filter values in a generic list using a different function (e.g. predicate delegates or something similar)?

Example:  Imagine that an application determines if user’s have access to a customer editing screen, but then additionally needs to determine which Customers the user has access to view based on a variety of criteria (e.g. by the Company the customer belongs to, by the Region, by the Customer Level, etc.).  Then imagine that on another section of the application you need to do this same type of filtering of the data that the user can see or edit using different objects and criteria and the filtering cannot be done in the WHERE clause of select statements (e.g. many many pre-existing stored procs that do not use this model).

Take these for example: Filter a List<Person> by peole with the Name == 'John' .  Filter a List<Customer> by customers that have any of the following companies listed for the Company value "Microsoft", "Apple", "Dell" and their Customer Tier is == 2.

  public class Person
    {
        public Person()
        {
            Id = Guid.NewGuid();
        }

        public string Name { get; set; }
        public Guid Id { get; set; }
    }


public class Customer : Person
    {
        public string Company { get; set; }
	public string Region { get; set; }
	public int Tier { get; set; }
    }

Open in new window

0
Comment
Question by:endrec
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 34096801
You can use the FindAll() method of a generic List<> to return a new list filtered based on a delegate.
0
 
LVL 16

Accepted Solution

by:
BurnieP earned 2000 total points
ID: 34098217
You can use lambda expression to filter your results :


List<Person> oPersonList = GetPersonList();
oPersonList = oPersonList .Where(c => c.Name == "John").ToList();

List<Customer> oCustomerList = GetCustomerList();
oCustomerList = oCustomerList.Where((c => c.Company == "Microsoft" || c.Company == "Apple" || c.Company == "Dell") && c.CustomerTier == 2)).ToList();

Open in new window

0
 
LVL 21

Expert Comment

by:Alpesh Patel
ID: 34101607
There are different functions to short/ find particular element from List. l.e Select, Find, FindAll etc.
0

Featured Post

Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

664 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question