using System.Collections.Generic;
using System.Linq.Expressions;
public static void Main()
var persons = new List<Person>
new Person { Id = 1, FirstName = "Fox", LastName = "Mulder", Age = 40 },
new Person { Id = 2, FirstName = "Dana", LastName = "Scully", Age = 35 }
var person = new Person(){FirstName = "Dana"};
var results = Search(persons,person);
foreach(var result in results)
Console.WriteLine($"{result.FirstName} {result.LastName} aged {result.Age}");
private static List<Person> Search(List<Person> persons, Person person)
IEnumerable<Person> result = persons;
if(!String.IsNullOrEmpty(person.FirstName))
result = result.Where(x => x.FirstName == person.FirstName);
if(!String.IsNullOrEmpty(person.LastName))
result = result.Where(x => x.LastName == person.LastName);
result = result.Where(x => x.Age == person.Age);
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }