Что-то вроде этого, вероятно, сделает эту работу за вас ...
public static IEnumerable<Item> SearchOverAnyFields(this IEnumerable<Item> items, string key, params Func<Item,string>[] fields)
{
return
from item in items
from field in fields.
Where(field => field(item) != null && field(item).Contains(key))
select item;
}
public static void ExampleUsage(object[] args)
{
var items = new List<Item> { new Item { Name = "badger" }, new Item { PartialDescription = "badger" }, new Item { } };
// searches items for any item that has "badger" in it's name or PartialDescription
var result = items.SearchOverAnyFields("badger", i => i.Name, i => i.PartialDescription);
foreach (var res in result)
Debug.WriteLine(res);
}
Вызов ExampleUsage () выведет два оператора в консоль отладки, чтобы убедиться, что они правильные элементы, которые у вас естьпостроить метод ToString для них.