Сборка помощника C # Linq

1
задан Mike Q 16 August 2010 в 12:29
поделиться

1 ответ

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);
2
ответ дан 2 September 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: