An IEnumerable
is not an IEnumerable
, поэтому вам нужен какой-то способ получить поле Address
из PropertyTable
(если вы не измените BuildAddressWhereClause
, чтобы принимать IEnumerable
.
Что-то вроде этого должно сработать:
public static IEnumerable<T> BuildAddressWhereClause<T>(IEnumerable<T> source, string value, AddressSearchOptions options, Func<T, Address> addressExtractor) {
string search = value.ToUpper();
if ((options & AddressSearchOptions.Address1To4) == AddressSearchOptions.Address1To4) {
source = source.Where(o => addressExtractor(o).Address1.ToUpper().Contains(search)
|| addressExtractor(o).Address2.ToUpper().Contains(search)
|| addressExtractor(o).Address3.ToUpper().Contains(search)
|| addressExtractor(o).Address4.ToUpper().Contains(search));
}
if ((options & AddressSearchOptions.City) == AddressSearchOptions.City) {
source = source.Where(o => addressExtractor(o).City.ToUpper().Contains(search));
}
if ((options & AddressSearchOptions.PostCode) == AddressSearchOptions.PostCode) {
source = source.Where(o => addressExtractor(o).PostCode.ToUpper().Contains(search));
}
return source;
}
И затем вы вызываете его как
IEnumerable<PropertyTbl> properties = ...;
IEnumerable<PropertyTbl> filteredProperties = AddressUtils.FilterAddresses(properties, "whatever", AddressSearchOptions.Whatever, p => p.Address);