簡體   English   中英

搜索所有字符串屬性

[英]Search all properties that are string

無論如何,是否有必要更改“位置”,它將自動檢查所有包含字符串的屬性,而不是手動添加每個屬性名稱?

 items.Where(m => m.Property1.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property2.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property3.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property4?.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property5?.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property6.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                || m.Property7?.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0
                                ));

謝謝。

我會用反射寫代碼...

public bool MyContains(object instance, string word)
{
        return instance.GetType()
                .GetProperties()
                .Where(x => x.PropertyType == typeof(string))
                .Select(x => (string)x.GetValue(instance, null))
                .Where(x => x != null)
                .Any(x => x.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0);
}

然后您的代碼將是

items.Where(m=>MyContains(m,word));

根據磅的答案:我接受了他的答案

我將其分解為兩個函數,因為無需獲取where中每個實例的字符串屬性。

public static class ObjectUtils
{
    public static IEnumerable<PropertyInfo> GetPropertiesByType<TEntity>(TEntity entity, Type type)
        {
            return entity.GetType().GetProperties().Where(p => p.PropertyType == type); 
        }

    public static bool CheckAllStringProperties<TEntity>(TEntity instance, IEnumerable<PropertyInfo> stringProperties, string word)
        {
            return stringProperties.Select(x => (string)x.GetValue(instance, null))
                .Where(x => x != null)
                .Any(x => x.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0);
        }
}

然后

var stringProperties = ObjectUtils.GetPropertiesByType(new Item(), typeof(string)); 

 items.Where(x => ObjectUtils.CheckAllStringProperties(x, stringProperties, word)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM