Я пытаюсь создать служебный метод с использованием Linq, который поможет мне с обычным поиском Linq-to-Objects.
У меня есть объект PropertyTbl, который имеет ссылку на адрес.
У меня есть IEnumerable<PropertyTbl>
.
Я написал помощник, который принимает IEnumerable<Address>
, а некоторые критерии поиска возвращают IEnumerable<Address>
, который при повторении даст мне совпадающие адреса.
Однако я не могу понять, как соединить их вместе, потому что хотя я могу сделать .Select () на моем IEnumerable<PropertyTbl>
, чтобы получить перечислимый адрес, мне нужен результат, равный IEnumerable<PropertyTbl>
.
Вот мой вспомогательный код
public static IEnumerable<Address> BuildAddressWhereClause(IEnumerable<Address> addresses, string value, AddressSearchOptions options)
{
string search = value.ToUpper();
if ((options & AddressSearchOptions.Address1To4) == AddressSearchOptions.Address1To4)
{
addresses = addresses.Where(o => o.Address1.ToUpper().Contains(search)
|| o.Address2.ToUpper().Contains(search)
|| o.Address3.ToUpper().Contains(search)
|| o.Address4.ToUpper().Contains(search));
}
if ((options & AddressSearchOptions.City) == AddressSearchOptions.City)
{
addresses = addresses.Where(o => o.City.ToUpper().Contains(search));
}
if ((options & AddressSearchOptions.PostCode) == AddressSearchOptions.PostCode)
{
addresses = addresses.Where(o => o.PostCode.ToUpper().Contains(search));
}
return addresses;
}
и я хочу вот что.
IEnumerable<PropertyTbl> properties = ...;
IEnumerable<PropertyTbl> filteredProperties = <use my address helper somehow>;
// this works but I need the properties as the result not just the addresses
IEnumerable<Address> filteredAddresses = AddressUtils.FilterAddresses(properties.Select(o => o.Address), "1 High Street", ...);
Я могу делать то, что хочу, помещая вспомогательный код непосредственно в код, в который загружаются / фильтруются свойства, но затем я не могу его повторно использовать.
Любые предложения приветствуются.