找到与通用列表中的任意条件匹配的项目

问题描述:

我在名为lst_Patient的列表中收集了患者。找到与通用列表中的任意条件匹配的项目

而这方法在那里我得到来自用户的信息:

public Patient[] GetPatientsBySearchParams(DataPair[] dataPair) 
     { 
    //return the array patients that match any of the criteria 
//Right Now I ma doing this didn't get any success : 

List<Patient> P = new List<Patient>(); 

      P = lst_Patient.FindAll(p => { p.FirstName = dataPair[0].OutputValue.ToString(); 
             p.LastName = dataPair[1].OutputValue.ToString(); 
             return true; 
return P.ToArray(); 

     } 

上的按钮点击我采取由用户在文本框中输入的信息:

private DataPair[] dpair; 
private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      InvalidSearch.Visibility = Visibility.Collapsed; 
      SearchResults.Visibility = Visibility.Visible; 

      dpair = new DataPair[]{ 
          new DataPair { Name = "FirstName", OutputValue = fst_Name.Text }, 
          new DataPair { Name = "LastName", OutputValue = lst_Name.Text }, 
          new DataPair { Name = "DateOfBirth", OutputValue = dob.Text }, 
          new DataPair { Name = "SSN", OutputValue = ssn.Text }, 
          new DataPair { Name = "PracticeNumber", OutputValue = pract_nbr.Text }, 
          new DataPair { Name = "ReferenceNumber", OutputValue = ref_nbr.Text }, 
          new DataPair { Name = "PlaceOfService", OutputValue = pos.Text }, 
          new DataPair { Name = "DateOfService", OutputValue = dos.Text}, 
          new DataPair { Name = "RenderingProvider", OutputValue = rndrng_prov.Text }, 
          new DataPair { Name = "AdmissionDate", OutputValue = admsn_date.Text } 
         }; 

      this.FetchData(); 
     } 


     private void FetchData() 
     { 

      Patient[] p = client.GetPatientsBySearchParams(dpair); 

     } 

public Patient[] GetPatientsBySearchParams(DataPair[] dataPair) 
{  
    P = lst_Patient.FindAll(
delegate(Patient tmp){ 
    if(tmp.FirstName = dataPair[0].OutputValue || tmp.LastName = dataPair[1].OutputValue) 
    return true; 
    else 
    return false; 
} 
); 

return P.ToArray(); 
} 
+0

有一些你需要在你的答案 代替p.FirstName这将是tmp.FirstName做的修改,我想匹配任何条件,而不是&&,使用|| ...谢谢为答案。 – Malcolm 2010-08-06 10:55:54

+0

@Malcolm固定。而不是一成不变的方法,你可以使用lambda或者difine静态函数。 – Arseny 2010-08-06 11:05:58

你应该使用反射来调用名字通过的属性。

p.GetType().GetProperty(dataPair[i].Name).GetValue(p) == dataPair[i].OutputValue;