Solved

Using List<> FindAll with multiple criteria

Posted on 2008-10-07
5
632 Views
Last Modified: 2013-12-17
Hello,

Forgive me if my terminology is not correct.  I am using the code below to return results from a list.  Currently it only uses the "Office" field as criteria how can I add multiple criteria.  For example have it use "Office" and "department".

Thanks
string office = ((ListBox)sender).SelectedValue;            
List<PartnerRecord> results = currentResults.FindAll(delegate(PartnerRecord pr1) 
                { return pr1.Office.Equals(office, StringComparison.CurrentCultureIgnoreCase); });

Open in new window

0
Comment
Question by:eshurak
  • 3
  • 2
5 Comments
 
LVL 26

Accepted Solution

by:
Anurag Thakur earned 500 total points
ID: 22664537
this should do
string office = ((ListBox)sender).SelectedValue;
string dept = "some value";

List<PartnerRecord> results =
    currentResults.FindAll(delegate(PartnerRecord pr1)
                { return
                               pr1.Office.Equals(office, StringComparison.CurrentCultureIgnoreCase) &&
                               pr1.Department.Equals(dept, StringComparison.CurrentCultureIgnoreCase)
                 ; });
0
 
LVL 3

Author Comment

by:eshurak
ID: 22664651
It should also compinate for offfice or dept being null.  Right now I'm doing this.

            List<PartnerRecord> results = currentResults;
               
            if (DepartmentList.SelectedValue != "")                
                results = results.FindAll(delegate(PartnerRecord pr1)
            { return pr1.Department.Equals(DepartmentList.SelectedValue.ToString(), StringComparison.CurrentCultureIgnoreCase); });

            if (OfficeList.SelectedValue != "")
                results = results.FindAll(delegate(PartnerRecord pr1)
                { return pr1.Office.Equals(OfficeList.SelectedValue.ToString(), StringComparison.CurrentCultureIgnoreCase); });

It works be I've got four different types of criteria to look at and it's going to get ugly.
0
 
LVL 26

Expert Comment

by:Anurag Thakur
ID: 22664847
what is your exact requirement
if office and department is present then return on the basis of both

if office is selected and dept is blank then also return results

if office is blank and dept is selected then also return results

and if both are blank then you already have the list

this can be achieved in the if elseif block easily (good for readilibity aslo)

string office = string.Empty;
string dept = string.Empty;
List<PartnerRecord> results = new List<PartnerRecord>();

if (office != string.empty && dept != string.empty)
{
      results = currentResults.FindAll (delegate (PartnerRecord pr1)
                        {
                              return pr1.Office.Equals (office, StringComparison.CurrentCultureIgnoreCase) && pr1.Department.Equals (dept, StringComparison.CurrentCultureIgnoreCase);
                        });
}
else if (office != string.Empty)
{
      results = currentResults.FindAll (delegate (PartnerRecord pr1)
                        {
                              return pr1.Office.Equals (office, StringComparison.CurrentCultureIgnoreCase);
                        });                  
}
else if (dept != string.Empty)
{
      results = currentResults.FindAll (delegate (PartnerRecord pr1)
      {
            return pr1.Department.Equals (dept, StringComparison.CurrentCultureIgnoreCase);
      });
}
else
{
      results = currentResults;
}
0
 
LVL 3

Author Comment

by:eshurak
ID: 22670408
Thanks for your help.  I went with a series of if statements instead or an if else.  If me it's easier to read and simplier to edit if things change.

            if (DepartmentList.SelectedValue != "")
                results = results.FindAll(delegate(PartnerRecord pr1)
            { return pr1.Department.Equals(DepartmentList.SelectedValue.ToString(), StringComparison.CurrentCultureIgnoreCase); });

            if (OfficeList.SelectedValue != "")
                results = results.FindAll(delegate(PartnerRecord pr1)
                { return pr1.Office.Equals(OfficeList.SelectedValue.ToString(), StringComparison.CurrentCultureIgnoreCase); });

            if (RoleOrCommitteeList.SelectedValue != "")
                results = results.FindAll(delegate(PartnerRecord pr1)
                { return pr1.RoleOrCommittee.Contains(RoleOrCommitteeList.SelectedValue.ToString()); });

            if(isEquity.Checked)
                results = results.FindAll(delegate(PartnerRecord pr1)
                { return pr1.IsEquity.Equals("True",StringComparison.CurrentCultureIgnoreCase); });
0
 
LVL 3

Author Closing Comment

by:eshurak
ID: 31504041
Thanks again.  Even though I did not use your initial sugguestion it's good to know that I can if I need to.
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
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 video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

803 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