LINQ dynamic query code
//Input : str=> string to search some text (First Name,Last Name,Date of Birth(dd/mm/yyyy) or post code) in any order; //output : result set str = str.ToLower().Replace(" ", " ").Trim(); IList<vw_patient> patients = App.Patients; string[] parts = str.Split(" ".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); Func<vw_patient, bool> predicate = null; foreach (string part in parts) { long retCode = 0; predicate = delegate(vw_patient p) { return p.Pati_FirstName.ToLower().StartsWith(part) || p.Pati_SurName.ToLower().StartsWith(part) || (long.TryParse(part.Replace("/", ""), out retCode) ? ((p.Pati_DOB.HasValue ? p.Pati_DOB.Value.ToShortDateString().Replace("/", "") : "").Contains(part.Replace("/", ""))) : false) || p.Pati_PostCode.Replace(" ","").ToLower().StartsWith(part); }; patients = patients.Where<vw_patient>(predicate).ToList(); } this.dgPatients.ItemsSource = new PagedCollectionView(patients); //PagedCollectionView is used for paging with data grid