Добро пожаловать в мир Linq!
Вы хотите вернуть IQueryable<Contact>
:
public class StoreDB
{
public Contact GetContact(int id) {...}
// change to this:
public IQueryable<Contact> GetContacts() {...}
}
Теперь вы можете сказать это без лишних циклов или пропускной способности:
IQueryable<Contact> SerachByFirstName(StoreDB store, string searchParam, int limit)
{
return store.GetContacts()
.Where(c => c.FirstName == searchParam)
.Take(limit);
}
Фактически, это все равно не отправит запрос в базу данных, если вы не начнете выполнять перечисление по IQueryable. То есть вы все равно можете добавить еще Where()
или OrderBy()
или что-либо еще, и они будут объединены и отправлены в источник вместе, когда запрос будет окончательно оценен.
Конечно, это не поможет вам привязаться к пользовательскому интерфейсу. Но это сложная проблема. Вы должны либо предоставить базовый EntitySet для WPF, либо использовать архитектуру MVVM (или аналогичную) для разделения доступа к данным и пользовательскому интерфейсу.