Solved

Using List<> FindAll with multiple criteria

Posted on 2008-10-07
5
625 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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This video discusses moving either the default database or any database to a new volume.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

743 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now