?
Solved

Using List<> FindAll with multiple criteria

Posted on 2008-10-07
5
Medium Priority
?
661 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 2000 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

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

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

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…
Suggested Courses

862 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