Да, на самом деле это довольно просто:
var name = GetBobNameFromXml();
var result = someObj.Where(i => i.Name == name);
Вы также можете выбрать, применять ли критерии по частям.
var result = someObj;
var name = xmlCriteria.Name;
if(!string.IsNullOrEmpty(name))
{
result = result.Where(i => i.Name == name);
}
// follow the same pattern for city, state, etc.
Вы можете даже использовать шаблон, который использует словарь с именованным ключом для критериальных функций, чтобы избежать кучки if
операторов.
foreach(var criterionPair in xmlCriteria)
{
var value = criterionPair.Value;
result = result.Where(i => propGetters[criterionPair.PropertyName](i, value));
}
По сути, вы можете многое сделать в этом направлении. Если вы хотите получить ответ, более конкретно соответствующий вашей ситуации, вам нужно будет предоставить более конкретный вопрос.